全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2257 4
2016-02-12
悬赏 20 个论坛币 未解决
     我现有的代码可以单独的计算指数的持有期收益率和波动率的分布,但是一个数量集里面放了几个指数就有点问题,如果每次都单独算,工作量太大,求大神帮忙。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2016-2-13 20:05:08
善用by
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-2-14 09:09:35
dogmamongo 发表于 2016-2-13 20:05
善用by
不是的,有用一个宏,我不太会修改,大概结构是这样的,
%macro loop;

data oneyearall;
  set _null_;
run;

%do m=1 %to 241;
if first.idx then do;
if last.idx then do;

%end;

%mend;
%loop;,现在的话只能用一个idx,增加就有点问题
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-2-14 17:07:14
.......
所以目前是
我们要先猜出你的语法
然后再猜出要如何修正

然后你才要说  对不起 你猜错了  
就你现在的东西  我也猜不到所有的语法
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-2-14 19:34:48
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;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群