SAS %DO %UNTIL 比较两个变量

SAS %DO %UNTIL compare two variables

我有一个如下所示的数据集 A1。

ID COL1    COL2    COL3  COL4  COL5.....
A  04JAN21 05JAN21 16JAN21  01FEB21 06FEB21....
B  19DEC20  01JAN21  02JAN21  18JAN21 31MAR21....
C ........
D ........`

ID 列是唯一的,COL1、COL2...是 SAS Date9。格式。我正在尝试比较 (COLi)+33 天和 COL(i+3)。如果(COLi)+33天>COL(i+3),则计为1.

我的 SAS 代码如下:

DATA _NULL_;
    SET A1;
    CALL SYMPUT('NO',LEFT(PUT(_N_,6.)));
RUN;
%MACRO TEST();
DATA A2;
    SET A1;
    %DO i=1 %TO &NO.;
       z=0;
    %DO %UNTIL(%SYSFUNC(COL%eval(&j+3))=.);
   %IF %SYSFUNC(COL%eval(&j+3))<INTNX('day',COL&j,33) %THEN %DO;
   %LET z=%eval(z+1);
    %END;
   %END;
  %END;
RUN;
%MEND;
%TEST;

以上例子,A case有case 1 & 4,case 2 & 5,算2次。 B case只有case 1 & 4.

请帮忙看看我有什么语法错误。非常感谢。

宏代码用于生成代码,而不是操作数据。

不清楚您要计算的是什么,但您可能不需要生成代码。只需遍历数组即可执行测试。

DATA A2;
  SET A1;
  array col col1-col5 ;
  z=0;
  do j=1 to dim(col)-3;
    if col[j+3] < col[j]+33 then z=z+1;
  end;
RUN;