我尝试使用宏和数组按组(id)滞后一堆变量。我的步骤是: 1. 滞后所有变量(组无关紧要) 2. 将错误滞后的单元格替换为.
但我发现我的代码有问题,感谢任何建议。
这是数据:
data old;
input id sale capx profit;
datalines;
1 11 111 1111
1 12 112 1112
1 13 113 1113
1 14 114 1114
1 15 115 1115
1 16 116 1116
1 17 117 1117
2 21 221 2221
2 22 222 2222
2 23 223 2223
3 31 331 3331
3 32 332 3332
3 33 333 3333
3 34 334 3334
4 41 441 4441
4 42 442 4442
4 43 443 4443
4 44 444 4444
4 45 445 4445
4 46 446 4446
;
run;
代码:
data new;
set old;
run;
%macro lag_var(dataset, lag);
proc sort data=&dataset;by id;
data &dataset;
set &dataset;
by id;
array vs(3) sale capx profit;
%do j=1 %to 3;
%do i=1 %to &lag;
lag&j&i=lag&i(vs(&j));
if first.id then
do;
count=1;
lag&j&i=.;
end;
count+1;
if (not first.id and count<=&i) then
do;
lag&j&i=.;
count+1;
end;
%end;
%end;
run;
%mend lag_var;
%lag_var(new,5)
电流输出(错误):
我的预期结果:
DomPazz 的输出: