Re: [程式] SAS迴圈問題

看板Statistics作者 (咖啡王子)時間12年前 (2013/05/08 11:39), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串3/3 (看更多)
※ 引述《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
這樣股票一遇到缺值 就補0即可 但絕對不是先算個股長期報酬
05/08 13:36, 1F

05/08 14:33, , 2F
了解了解!!!!!謝謝您!
05/08 14:33, 2F
文章代碼(AID): #1HYSZRpj (Statistics)
討論串 (同標題文章)
文章代碼(AID): #1HYSZRpj (Statistics)