如果在第一个条件被验证时没有执行条件SAS

时间:2017-01-02 22:34:19

标签: if-statement sas

执行以下代码且结果错误。 验证第一个条件时,代码无法正常工作。 当值为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);

1 个答案:

答案 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;