通过SAS中的循环生成多个滞后?
我试图为一个变量生成20个滞后。 要生成第一个滞后,我使用以下语句:通过SAS中的循环生成多个滞后?,sas,Sas,我试图为一个变量生成20个滞后。 要生成第一个滞后,我使用以下语句: data temp.data2; set temp.data1; by gvkey fyear; lag1 = ifn(gvkey=lag(gvkey) and fyear=lag(fyear)+1,lag(mv),.); lag2 = ifn(gvkey=lag(gvkey) and fyear=lag(fyear)+1,lag(lag1),.); etc. run;
data temp.data2;
set temp.data1;
by gvkey fyear;
lag1 = ifn(gvkey=lag(gvkey) and fyear=lag(fyear)+1,lag(mv),.);
lag2 = ifn(gvkey=lag(gvkey) and fyear=lag(fyear)+1,lag(lag1),.);
etc.
run;
我不想重复20次。有没有办法通过循环来实现这一点
非常感谢 您必须维护自己的mv值数组,并从中分配滞后值。数组将针对处理的每一行冒泡,并在fyear组开始时重置 例如:
data have;
do gvkey = 1 to 5;
do fyear = 1 to 5;
do day = 1 to ifn(fyear=3, 10, 30);
mv = 366-day;
output;
end;
end;
end;
run;
data want;
set have;
by gvkey fyear;
array mvs(20) _temporary_;
array lags(20) lag1-lag20;
if first.fyear then call missing(of mvs(*));
* assign lags;
do _n_ = 1 to dim(lags);
lags(_n_) = mvs(_n_);
end;
* bubble mvs;
do _n_ = dim(lags) to 2 by -1;
mvs(_n_) = mvs(_n_-1);
end;
mvs(1) = mv;
run;