|
5#

楼主 |
发表于 2012-7-6 14:33:35
|
只看该作者
Re: 求助——挑战
[code:1h1ctds7]
data ads;
input date date10. income1 income2 vol rate;
cards;
01jan2012 99 100 200 3
02jan2012 98.1 99.9 100 3
04jan2012 98.3 99.5 0 3
05jan2012 98.5 99.1 0 3
06jan2012 99.7 98.1 4 3
06jan2012 99.7 98.1 5 3
08jan2012 99.7 98.1 6 3
15jan2012 99.7 98.1 7 3
26jan2012 99.7 98.1 8 3
;
run;
data result;
set ads;
n=1;
do i=_n_+2 to count;
n=n+1;
set a(keep=date income2 vol rename=(date=date_lag income2=income2_lag vol=vol_lag)) nobs=count point=i;
if vol_lag^=0 then leave;
end;
select;
when (n=2) syl=income2_lag/income1-1-rate*(date_lag-date)/100;
when (n>2) syl=income2_lag/income1-rate*(date_lag-date)/36500;
otherwise;
end;
drop n date_lag income2_lag vol_lag;
run;
proc iml;
use ads;
read all into A[colname={'date','income1','income2','vol','rate'}];
close ads;
S=J(nrow(A),1,.);
do i=1 to nrow(A);
N=1;
do j=i+2 to nrow(A);
N=N+1;
if A[j,4]^=0 & N>=2 then do;
if N=2 then do;C=1;D=100;end;else do;C=0;D=36500;end;
S[i]=A[j,3]/A[i,2]-C-A[i,5]#(A[j,1]-A[i,1])/D;
goto exit;
end;
end;
exit:;
end;
R=A||S;
create result var {'date','income1','income2','vol','rate','syl'};
append from R;
quit;
[/code:1h1ctds7] |
|