У меня проблема с макросом SAS. Я использовал команду do%% затем l oop в pro c означает, но функция% index использует имя столбца как простую строку, а не как имя столбца. Но нужно проверить значения в столбце.
Вот макрос, который я написал.
%let varlist = mzda mzdy vyplat odmena wage payroll SALARY INSTRUCT PAYMENT;
%macro quickndirty;
%let it_numb = %sysfunc(countw(&varlist.));
proc means data=CZ_DATA.TRNS_FNCP_D (keep=DB_CLIENT_ID DB_ACCOUNT PAYMENT_INSTRUCT DT_REP DB_BANK_BIC DB_CLIENT_ID)noprint nway;
class DB_CLIENT_ID DB_ACCOUNT PAYMENT_INSTRUCT;
output out= SALARY_P2 (keep = DB_CLIENT_ID DB_ACCOUNT PAYMENT_INSTRUCT _FREQ_ );
where DT_REP = &report_date.
%do i=1 %to &it_numb.;
%if %index(PAYMENT_INSTRUCT, %scan(&varlist., &i.))>0 %then
%do;
and 1=1
%end;
%else %if &i. = &it_numb. %then
%do;
and 1=0
%put zase 2;
%end;
%end;
;
run;
%mend;
%quickndirty
образец данных:
DB_CLIENT_ID DB_ACCOUNT PAYMENT_INSTRUCT DT_REP
79325 1387348961 SALARY 01/20 11feb2020
79322 1387355558 SALARY 02/20 11feb2020
кто-нибудь посоветует мне, как изменить код для использования значений из столбца? Код не завершен, потому что я должен сначала решить эту проблему.
Я использовал l oop вместо следующей команды. если у кого-то есть лучшее решение, чем утверждение l oop, можете ли вы дать мне совет? Но это должно быть еще макро. Но это все равно должен быть макрос, один и тот же код будет выполняться несколько раз, и я не хочу копировать один и тот же код снова и снова.
and (PAYMENT_INSTRUCT contains 'mzda' or
PAYMENT_INSTRUCT contains 'mzdy' or
PAYMENT_INSTRUCT contains 'vyplat' or
PAYMENT_INSTRUCT contains 'odmena' or
PAYMENT_INSTRUCT contains 'wage' or
PAYMENT_INSTRUCT contains 'payroll' or
PAYMENT_INSTRUCT contains 'salary')
Спасибо