dogmamongo 发表于 2016-2-14 17:07
.......
所以目前是
我们要先猜出你的语法
大神我错了,我是那个没有给全代码的人,real尴尬。代码是这样的,目前的情况是如果我把不同的指数收益率放在同一个数据集,结果有点问题,但是我在每一个指数最前面一行加上收益率为空白的一行,结果就是正确的,但是我不知道怎么来修正代码,只是目前结果正确了。大神方便的话能帮我看一下吗
***five-year holding period;
%macro loop;
data fiveyearall;
set _null_;
run;
%do m=1 %to 241; ***199101-201512 m-max 241;
data fiveyrret (keep=idx begm endm count cumret annret annvol);
format begm yymmddn8. endm yymmddn8.;
set mktindex_1 (where=(intnx('month','31Dec90'd,&m, 'beg')<=datesas<=intnx('month','31Dec90'd,&m+59, 'end')));
by idx datesas;
retain count cumret begm endm sumretsqr sumret;
if first.idx then do; begm=intnx('month','31Dec90'd,&m, 'beg');
endm=intnx('month','31Dec90'd,&m+59, 'end');
cumret=1+mret; count=1;
sumretsqr=mret**2;
sumret=mret;end;
else do; cumret=cumret*(1+mret); count=count+1;
sumretsqr=sumretsqr+mret**2;
sumret=sumret+mret;end;
if last.idx then do; annret=cumret**(1/5)-1; annvol=sqrt(12)*sqrt(1/59*(sumretsqr-60*(1/60*sumret)**2));output;end;
run;
data fiveyearall;
set fiveyearall fiveyrret;
run;
%end;
%mend;
%loop;
/*
proc print data=fiveyrret;
run;
*/
proc print data=fiveyearall;
where annret>8;
run;
title '199101-201512, five-year holding period';
proc means data=fiveyearall n mean min q1 median q3 max;
var annret annvol;
run;
quit;