请选择 进入手机版 | 继续访问电脑版
楼主: mengha
1947 4

[有偿编程] 完善代码,使之可以按组计算波动率 [推广有奖]

  • 2关注
  • 0粉丝

博士生

32%

还不是VIP/贵宾

-

威望
0
论坛币
1 个
通用积分
2.1564
学术水平
2 点
热心指数
3 点
信用等级
1 点
经验
2860 点
帖子
130
精华
0
在线时间
375 小时
注册时间
2008-11-29
最后登录
2020-2-15

mengha 发表于 2016-2-12 21:00:49 |显示全部楼层 |坛友微信交流群
20论坛币
     我现有的代码可以单独的计算指数的持有期收益率和波动率的分布,但是一个数量集里面放了几个指数就有点问题,如果每次都单独算,工作量太大,求大神帮忙。

关键词:波动率 持有期收益率 收益率 持有期 工作量 收益率 工作量
dogmamongo 发表于 2016-2-13 20:05:08 |显示全部楼层 |坛友微信交流群
善用by

使用道具

mengha 发表于 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,增加就有点问题

使用道具

dogmamongo 发表于 2016-2-14 17:07:14 |显示全部楼层 |坛友微信交流群
.......
所以目前是
我们要先猜出你的语法
然后再猜出要如何修正

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

使用道具

mengha 发表于 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;

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-19 10:13