Как я могу выполнить итеративную программу макросов с последовательными постоянными числами в sas?
Я новичок в макросе. Я модифицировал макропрограмму и работает. Но я должен написать следующий макрос сто раз следующим образом.
%quint(dsn=cc1, var=MB, quintvar=MB5, num=111) ;
%quint(dsn=cc1, var=MB, quintvar=MB5, num=112) ;
%quint(dsn=cc1, var=MB, quintvar=MB5, num=113) ;
-
-
%quint(dsn=cc1, var=MB, quintvar=MB5, num=400) ;
Каждый раз, когда я делаю программу для этой работы, num распознается как arugment вместо постоянных чисел. Как я могу сделать короткий и легкий для этого?
2 ответа
Вы можете использовать оператор RETAIN и CALL EXECUTE.
%macro quint (dsn, var, quintvar, num);
%put &dsn;
%put &var;
%put &quintvar;
%put #
%mend;
data _null_;
retain numv 111;
do until (numv = 400);
call execute ('%quint(cc1, MB, MB5,'||numv||')');
numv+1;
end;
run;
Это работает.
Использование вызова execute обычно нормально, но это может быть немного затруднительно, чтобы правильно процитировать цитаты, и я обнаружил, что иногда он не может правильно обрабатывать сложные макросы. Я предпочитаю использовать макроподход, переписывая исходный макрос, чтобы принимать параметры для начала и конца цикла, или записывая макрос-обертку, например
%macro quint (dsn, var, quintvar, num);
%put &dsn;
%put &var;
%put &quintvar;
%put #
%mend;
%macro run_quint(dsn, var, quintvar, num_from, num_to);
%local i;
%do i = &num_from %to &num_to;
%quint(dsn=&dsn, var=&var, quintvar=&quintvar, num=&i)
%end;
%mend;
%run_quint(dsn=cc1, var=MB, quintvar=MB5, num_from=111, num_to = 115);