proc sql; create table return1 as select a.*, b.ret, b.date from elist as a, crsp.msf(keep= date permno ret) as b where a.permno = b.permno and (b.date > a.begdat and b.date <= a.enddat); quit; run;
proc sql; create table return2 as select a.*, b.vwretd from return1 as a, crsp.msi(keep= date vwretd) as b where a.date= b.date ; quit; run;
data return3; set return2; logret = log(1+ret); logretw = log(1+vwretd);
proc sort; by permno begdat enddat date;
proc means; var logret logretw; by permno begdat enddat; output out=sumoflogs sum (logret logretw ) = cumlogret cumlogretw;
data mydata; set sumoflogs; cumret=exp(cumlogret) - 1; cumretw=exp(cumlogretw) - 1; keep permno begdat enddat cumret cumretw ;