输出ZIP数据集

时间:2015-10-26 17:25:20

标签: arrays if-statement macros

我正在寻找一些帮助来创建一个利用数组的宏以及用于子集化的DO和IF语句。在我的宏语句中,我试图查看变量列,如果变量有特定的诊断代码,那么创建一个新变量并标记为1,如果没有将所有其他变量标记为0,则创建一个基于的新数据集新变量,对数据集进行排序,并将其附加到其他数据集(因为输入数据集每季度分解),从而创建一个我可以导出的最终数据集(最好是作为新创建的ZIP文件来保存存储)空间下来)。我使用的是SAS 9.4 / Enterprise Guide 7.1。

代码:

OPTIONS MERROR SERROR SOURCE MLOGIC SYMBOLGEN MINOPERATOR OBS=MAX;
%MACRO DIAGXX(a,b);
DATA NEW;
    SET x.&a(KEEP= PATID DIAG1-DIAG5);
    ARRAY &b{5} $ DIAG1-DIAG5;
    DO I = 1 TO 5;
        IF &b{I} IN ("1630" "1631" "1638" "1639") THEN MESO = 1; 
        ELSE MESO = 0;
    END;
    DROP I;
RUN;

PROC SORT DATA=NEW NODUPKEY;
    BY PATID;
    WHERE MESO=1;
RUN;

PROC APPEND BASE=ALLDATA1 DATA=NEW FORCE;
RUN; 

PROC EXPORT
        DATA=ALLDATA1
        OUTFILE= "C:\x\x\DIAGNOSIS EXPORT\MACRO DIAGXX MESO.CSV"
        REPLACE
        DBMS=CSV;
RUN;
%MEND DIAGXX;

%DIAGXX(Q1,MESTH);
%DIAGXX(Q2,MESTH);

1 个答案:

答案 0 :(得分:0)

您可能希望以这种方式创建MESO标志,以便数组中任何变量中任何代码的存在将MESO设置为true,并且当代码永远不会出现在任何变量中时它将为false

MESO = 0;
DO I = 1 TO 5;
    IF &b{I} IN ("1630" "1631" "1638" "1639") THEN MESO = 1; 
END;

如果你想获得想象,你可以通过在找到代码后停止循环来节省一点时间。

DO I = 1 TO 5 WHILE (MESO=0);