感謝各位的幫助!
以下是我寫的過程,
data data;
input yr y;
cards;
1988 55
1989 70
1990 90
1991 150
1992 170
run;
data addyr;
set data end=end;
output;
if end then do until(yr=2002);
yr+1; y=.;
output;
end;
run;
data Q1;
set addyr;
retain ytop 0;
if _n_=1 then ytop=y;
else do;
f=0.1;
ytop=ytop*(1-f)+y;
end;
aaa=0; ybar=0;
do m=1 to _n_;
f=0.1;
aa= (1-f)**(m-1);
aaa=aa+aaa;
end;
ybar=ytop/aaa;
run;
data Q2;
set Q1;
retain r1 0;
r1=lag(ybar);
r=ybar/r1;
run;
data Q3;
set Q2;
retain rtop 0;
if _n_=2 then rtop=r;
else do;
f=0.1;
rtop=(1-f)*rtop+r;
end;
aaa=0; rbar=0;
do m=2 to _n_;
f=0.1;
aa= (1-f)**(m-2);
aaa=aa+aaa;
end;
rbar=rtop/aaa;
run;
data Q4;
set Q3;
lybar=lag(ybar);
lrbar=lag(rbar);
py=lybar*lrbar;
run;
data p2Q5;
set Q4;
ppy=y;
run;
data p1Q5;
set Q4;
ppy=py;
run;
data pQ5;
update p1Q5 p2Q5;
by yr;
run;
data Q5;
set pQ5;
retain pytop 0;
if _n_=1 then pytop=ppy;
else do;
f=0.1;
pytop=pytop*(1-f)+ppy;
end;
aaa=0; pybar=0;
do m=1 to _n_;
f=0.1;
aa= (1-f)**(m-1);
aaa=aa+aaa;
end;
pybar=pytop/aaa;
run;
data Q6;
set Q5;
retain r2 0;
r2=lag(pybar);
pr=pybar/r2;
run;
data Q7;
set Q6;
retain prtop 0;
if _n_=2 then prtop=pr;
else do;
f=0.1;
prtop=(1-f)*prtop+pr;
end;
aaa=0; prbar=0;
do m=2 to _n_;
f=0.1;
aa= (1-f)**(m-2);
aaa=aa+aaa;
end;
prbar=prtop/aaa;
run;
data Q8;
set Q7;
prbar2=lag(prbar);
py=r2*prbar2;
run;
/*如何不斷重覆p2Q5至 Q8 的程序..直至 2002年呢?*/
proc print data=Q8;
run;
現在ouput py的樣子是:
Obs py
1 .
2 .
3 71.923
4 83.954
5 115.258
6 136.720
7 138.030
8 .
9 .
10 .
11 .
12 .
13 .
14 .
15 .
但我想不斷重覆p2Q5至 Q8 的程序後output是:
py
- |
- |
71.92 |
83.95 |
115.26 |
136.72 |
138.03 |
138.91 |
139.54 |
140.01 |
140.36 |
140.64 |
140.86 |
141.04 |
141.18 |