作者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