У меня есть следующие условия if-else в макросе SAS:
%if &restart_flg = Y %then %do;
%if %sysfunc(exist(&library.f2)) %then %do;
proc sql;
Connect to xxxxx as dbcon (user=xx pw=xx server=xx port=xxx database=xxxxx);
select * into :prcs_flag_cnt
from connection to dbcon (
select count(1)::smallint
from &library.f2
where flag = 1 and pflag <> 'N'
);
quit;
%put Process count flag: &prcs_flag_cnt;
%if &prcs_flag_cnt > 0 %then %do;
%let rflag = Y;
%end;
%else %do;
%let rflag = N;
%end;
%end;
%else %do;
%let rflag = N;
%end;
%end;
%else %do;
%let rflag = N;
%end;
В основном я проверяю, является ли конкретное выполнение новым или перезапущенным, и соответствующим образом заполняю rflag (Y для перезапуска, N для нового запуска). Во-первых, я проверяю, является ли restart_flg Y, если да, я проверяю наличие набора данных SAS (flags2), и если он существует, я проверяю, существуют ли какие-либо записи с «flag = 1 и pflag ‹> 'N'" условие, а затем заполните Y или N для rflag соответственно. Если на первом месте restart_flg стоит N, rflag устанавливается на N.
Я считаю, что множественные условия, написанные в коде, менее элегантны. Есть ли лучший способ написать это условие if-else или выполнить эту функциональность?
Спасибо!