通过SAS中的循环生成多个滞后?

通过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;

我试图为一个变量生成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; 
我不想重复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;