data crackman;
input code date r@;
datalines;
1 1 0.1
1 1 0.2
1 2 0.3
1 2 0.4
2 1 -0.5
2 1 0.5
2 2 0.6
2 2 0.4
;
run;
proc sql;
create table crackman as
select code,date,r ,sum(r) as r_sum,mean(r) as r_mean from crackman
group by 1 ,2;
quit;
data crackman;
set crackman;
codedate=compress(cat(code,date));
run;
data crackman;
set crackman;
by codedate notsorted;
retain multi 1;
if first.codedate then multi=r;
else multi=multi*r;
if last.codedate;
drop codedate;
run;
data crackman;
input code date r@;
datalines;
1 1 0.1
1 1 0.2
1 2 0.3
1 2 0.4
2 1 -0.5
2 1 0.5
2 2 0.6
2 2 0.4
;
run;
proc sql;
create table crackman as
select code,date,r ,sum(r) as r_sum,mean(r) as r_mean from crackman
group by 1 ,2;
quit;
data crackman;
set crackman;
codedate=compress(cat(code,date));
run;
data crackman;
set crackman;
by codedate notsorted;
retain multi 1;
if first.codedate then multi=r;
else multi=multi*r;
if last.codedate;
drop codedate;
run;
data a;
input code date r;
cards;
1 1 0.1
1 1 0.2
1 2 0.3
1 2 0.4
2 1 -0.5
2 1 0.5
2 2 0.6
2 2 0.4
run;
proc sql;
create table b as
select date, code, sum(r) as r_sum, mean(r) as r_mean
from a
group by code, date;
run;
data c;
set a;
if first.date then do;
r_sum=0;
rn=0;
rprod=1;
end;
r_sum+r;
rn+1;
rprod=rprod*r;
retain rprod;
if last.date;
by code date;
run;
data d;
set c;
r_mean=r_sum/rn;
drop r rn;
run;
proc sql;
create table b as
select date, code, sum(r) as r_sum, mean(r) as r_mean ,(sum(sign(r))-1)*exp(sum(log(abs(r)))) as r_prod
from a
group by code, date;
run;