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;
我有一个如下所示的数据集 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;