Я ищу некоторую помощь при создании макроса с использованием массива, а также операторов DO и IF для подмножества. В моей макрокоманде я пытаюсь просмотреть столбцы для переменных, и если переменная имеет конкретный код диагностики, то создайте новую переменную и отметьте как 1, а если не отметьте все остальные как 0, чтобы создать один новый набор данных, основанный на что новая переменная, сортировка этого набора данных и добавление его к другим наборам данных (поскольку набор входных данных разбивается ежеквартально), создавая таким образом один конечный набор данных, который я могу затем экспортировать (желательно в качестве вновь созданного ZIP-файла для хранения пространство вниз). Я использую SAS 9.4/Enterprise Guide 7.1.Вывод ZIP-данных
Код:
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);
Возникает вопрос, как правильно искать по нескольким переменным и устанавливать один флаг «MESO», который будет истинным, если ЛЮБЫЕ из переменных содержат какие-либо коды? Если это так, удалите предложение 'ELSE' и вместо этого инициализируйте MESO до нуля до цикла DO. – Tom