作者tew (咖啡王子)
站内Statistics
标题Re: [程式] SAS回圈问题
时间Wed May 8 11:39:02 2013
※ 引述《ygzjkx (安安)》之铭言:
: ※ 引述《ygzjkx (安安)》之铭言:
: : ------------------------------------------------------------------------
: : [软体程式类别]:
: : SAS
: : [程式问题]:
: : 回圈问题
: : [软体熟悉度]:
: : 中(3个月到1年)
: : [问题叙述]:
: : 程式目的:
: : 若xr{i}不为缺值时,则zri_ew{i}=(1+zri_ew{i-1})*(1+xr{i})-1;
: : 若遇到观察值之第一笔缺值时,则回圈到y值停止!
: : 遇到瓶颈:
: : 假设i=5的时候遇到缺值,则会求出一个y值,预期可以求得zri_ew{y}
: : 但回圈继续执行时,万一同一笔观察值在i=7时,也为缺值,
: : 则此时会求出一个新的y值,预期会求得新的zri_ew{y}!
: : 但我希望回圈到第一个y时就停止回圈!
: : 换句话说,若观察值出现两个以上的缺值,本文需要的为第一个缺值所计算出来的
: : y值,但下述程式范例似乎会取到观察值最後一个缺值所计算出来的y值!
: : 不知程式范例应如何修改,麻烦帮忙解惑!感恩!
: : [程式范例]:
: : zri_ew1=ret1;
: : DO i=2 TO 60;
: : IF xr{i} NE . THEN zri_ew{i}=(1+zri_ew{i-1})*(1+xr{i})-1;
: : ELSE
: : DO;
: : xr{i}=xpr{i};
: : y=i+(12-MOD(MOD(yrmon,100)+i,12));
: : DO UNTIL (i=y);
: : zri_ew{i}=(1+zri_ew{i-1})*(1+xr{i})-1;
: : END;
: : END;
: : END;
: : -----------------------------------------------------------------------------
: zri_ew1=ret1;
: DO i=2 TO 60;
: IF xr{i} NE . THEN zri_ew{i}=(1+zri_ew{i-1})*(1+xr{i})-1;
: ELSE DO;
: xr{i}=xpr{i};
: y=i+(12-MOD(MOD(yrmon,100)+i,12));
: DO j=i+1 to y;
: DO w=y+1 to 60;
: xr{j}=xpr{j};
: xr{w}=0;
: END;
: END;
: zri_ew{i}=(1+zri_ew{i-1})*(1+xr{i})-1;
: END;
: END;
: END;
: 也就是在遇到第一个缺值的时候,将xr{i}-xr{y}以xpr{i}-xpr{y}替代
: 然後xr{y+1}-xr{60}则等於0(因为等於零之後带入持有期间报酬的公式中,并不会影响!)
: 这样遇到第一次缺值都取代完之後,就不会有"遇到第二次缺值"的问题了!
: 只是要如何加入限制式y<=60?
你现在是在算个股60个月的累积报酬率
然後想要再计算平均作为投资组合报酬率
由於LSV(1994)是用等值加权投资组合 我现在举两档股票
你思考一下
单位皆为%
a 10 10 10
b -10 -10 -10
我先算a的3个月累积报酬率 得33.1%
b的3个月累积报酬率 得-27.1%
平均3个月累积报酬率是 2%
但是正解却是 0
应该在仔细看看paper的意义
而实际上你现在会一直卡在要用同规模的报酬率
你应该往下看
他是用规模调整後报酬率做为raw return计算
所以你应该一开始就将所有的股票报酬率都扣去同属规模报酬率
接下来其实就相当简单了
--
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 222.78.246.180
※ 编辑: tew 来自: 222.78.246.180 (05/08 12:26)
1F:→ tew:这样股票一遇到缺值 就补0即可 但绝对不是先算个股长期报酬 05/08 13:36
2F:推 ygzjkx:了解了解!!!!!谢谢您! 05/08 14:33