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次。有没有办法通过循环来做到这一点?
非常感谢!
解决方案
您必须维护自己的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;
推荐阅读
- android - Windows emulator.exe PANIC:缺少“x86”CPU 的仿真器引擎程序
- javascript - 将 JavaScript 代码抽象为 ES6 函数
- java -
更新 不能在 oracle 数据库中工作,而在 mysql 中它可以工作 - angular - Angular 2 移动元素动画
- sql - 如何使用 count() 函数在 sql server 中将单列检索为两列?
- corda - deployNodes 任务时出现胶囊异常
- concurrency - Pyqt5 并发文件操作与 concurrent.futures 模块
- android - Fabric 插件未集成在 Android Studio 中
- linux - 如何比较同一文件中的两列并根据它将差异与未更改的列存储在新文件中?
- python - python中定义的函数不识别if和参数