Re: [程式] SAS迴圈問題
※ 引述《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)
→
05/08 13:36, , 1F
05/08 13:36, 1F
推
05/08 14:33, , 2F
05/08 14:33, 2F
討論串 (同標題文章)