执行以下代码且结果错误。 验证第一个条件时,代码无法正常工作。 当值为3时,lag1仍然缺失... 谢谢你的帮助。
DATA VALUES;
INPUT VAL caract$ var1 var2;
DATALINES;
1 a 12 0
1 c 0 4
1 c 3 2
2 a 3 2
2 b 15 16
2 b 4 1
3 a 12 13
3 c 12 13
4 c 14 15
5 b 14 0
6 b 14 15
7 a 12 15
7 c 12 15
8 c 14 15
9 c 14 5
10 c 13 7
;
RUN;
%macro lag_var(dataset, lag);
data &dataset&lag;
set &dataset;
by VAL;
%do i=0 %to &lag;
if caract eq 'b' then
lag&i=lag&i(var1);
else lag&i = lag&i(var2);
%end;
if first.VAL then do;
count=0;
%do i=1 %to &lag;
lag&i=.;
%end;
end;
count+1;
%do i=1 %to &lag;
if (not first.VAL and count<=&i) then do;
lag&i=.;
end;
%end;
maxi = max(of lag1 - lag&lag);
run;
%mend lag_var;
%lag_var(VALUES,3);
答案 0 :(得分:2)
这肯定与LAG功能的条件执行有关。尝试使用TEMP1和TEMP2变量更改为此类值以保持滞后值。
%do i=0 %to &lag;
temp1=lag&i(var1);
temp2=lag&i(var2);
if caract eq 'b' then
lag&i=temp1;
else lag&i = temp2;
%end;