作者ygzjkx (安安)
看板Statistics
標題Re: [程式] SAS迴圈問題
時間Wed May 8 11:07:58 2013
※ 引述《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?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 120.126.192.41