我有以下形式(简化)的不平衡面板数据集:
data have;
input ID YEAR EARN LAG_EARN;
datalines;
1 1960 450 .
1 1961 310 450
1 1962 529 310
2 1978 10 .
2 1979 15 10
2 1980 8 15
2 1981 10 8
2 1982 15 10
2 1983 8 15
2 1984 10 8
3 1972 1000 .
3 1973 1599 1000
3 1974 1599 1599
;
run;
我现在想为每个ID估算以下模型:
proc reg;
by ID;
EARN = LAG_EARN;
run;
但是,我想对某些大小的滚动窗口执行此操作。例如,对于大小为2的窗口,该窗口应仅包含非空观察值。例如,对于公司A,该窗口从1961年开始适用,因此只能使用一次(因为1961年之后仅一年,并且该窗口的大小应为2)。
最后,我想获得一个包含年份列和行的表格。该表应指示以下内容:对于A公司,已经执行了一次回归模型(窗口大小为2)。可用年的数量仅允许对该模型进行一次估计。换句话说,在1962年,回归模型的系数基于前2年的窗口具有X值。将相同的逻辑应用于其他两家公司,可以得到下表。“ X”代表基于两年窗口的企业A / B / C在特定年份的估计系数值,而“ n”代表不存在该值:
data want;
input ID 1962 1974 1980 1981 1982 1983 1984;
datalines;
1 X n n n n n n
2 n n X X X X X
3 n X n n n n n
;
run;
我不知道该如何执行。此外,我想创建一个宏,使我可以估计不同的滚动窗口模型,同时仍然创建类似的输出数据帧。我将不胜感激,因为我已经花了很多时间了。
试试这个宏。仅当您指定的滞后值不丢失时才输出。
%macro lag(data=, out=, window=);
data _want_;
set &data.;
by ID;
LAG_EARN = lag&window.(earn);
if(first.ID) then call missing(lag_earn);
if(NOT missing(lag_earn));
run;
proc sort data=_want_;
by year id;
run;
proc transpose data=_want_
out=&out.(drop=_NAME_);
by ID notsorted;
id year;
var lag_earn;
run;
proc sort data=&out.;
by id;
run;
%mend;
%lag(data=have, out=want, window=1);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句