我感觉写的比较繁琐,应该有简单的方法吧。
data have;
date=10;stock=1;r=0.11;output ;
date=1;stock=1;r=0.11;output ;
date=2;stock=1;r=0.22;output ;
date=3;stock=1;r=0.33;output ;
date=4;stock=1;r=0.44;output ;
date=5;stock=1;r=0.55;output ;
date=6;stock=1;r=0.66;output ;
date=7;stock=1;r=0.77;output ;
date=8;stock=1;r=0.88;output ;
date=9;stock=1;r=0.99;output ;
date=1;stock=2;r=0.11;output ;
date=2;stock=2;r=0.22;output ;
date=3;stock=2;r=0.33;output ;
date=4;stock=2;r=0.44;output ;
date=5;stock=2;r=0.55;output ;
date=6;stock=2;r=0.66;output ;
date=7;stock=2;r=0.11;output ;
date=8;stock=2;r=0.11;output ;
date=9;stock=2;r=0.11;output ;
date=10;stock=2;r=0.11;output ;
run;
proc sort data=work.have;by stock date;run;
data want;
retain begin_stock;
set have;
by stock date;
if first.stock then begin_stock=_n_;
nobs+1;
begins = max(nobs - 6,begin_stock);
ends = _n_ - 1;
r_new =.;
do i=begins to ends;
set have(keep=r rename=(r=rr)) point=i;
r_new+rr;
end;
drop nobs begins ends rr;
run;
|