通过 SAS 中的循环生成多个滞后? [英] Generate multiple lags through loops in SAS?

查看:52
本文介绍了通过 SAS 中的循环生成多个滞后?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试为变量生成 20 个滞后.为了生成第一个滞后,我使用以下语句:

I'm trying to generate 20 lags for a variable. To generate the first lag, I use the following statement:

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次.有没有办法通过循环来做到这一点?

Don't want to repeat 20 times. Is there a way to do this through a loop?

非常感谢!

推荐答案

您必须维护自己的 mv 值数组并从中分配滞后值.在 fyear 组开始时处理和重置的每一行都会冒泡数组.

You would have to maintain your own array of mv values and assign the lag values from that. The array would be bubbled for each row processed and reset at the start of an fyear group.

示例:

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;

这篇关于通过 SAS 中的循环生成多个滞后?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆