Присвоение переменных let оператору WHERE с использованием DATA NULL - PullRequest
0 голосов
/ 02 мая 2019

Привет. Я пытаюсь использовать шаг DATA NULL, чтобы присвоить значение переменной на основе различных критериев.Эта переменная из оператора NULL будет назначена оператору WHERE на следующем шаге DATA.

В идеале, если я запускаю его сегодня (четверг, который равен 5), код должен возвращать 30APR2019 для обеих переменных.Но мой код выбрасывает только значение переменной в операторе LAST-IF-.

data _null_;

if weekday(today()) = 5 then do;
    %let exc_st_day = '30APR2019'd;
%let exc_en_day = '30APR2019'd;
end;

else if weekday(today()) = 6 then do;
%let exc_st_day = '01MAY2019'd;
%let exc_en_day = '01MAY2019'd;
end;

else if weekday(today()) = 2 then do;
%let exc_st_day = '02MAY2019'd;
%let exc_en_day = '02MAY2019'd;
end;

else if weekday(today()) = 3 then do;
%let exc_st_day = '03MAY2019'd;
%let exc_en_day = '03MAY2019'd;
end;

else if weekday(today()) = 4 then do;
%let exc_st_day = '04MAY2019'd;
%let exc_en_day = '06MAY2019'd;
end;

%put &exc_st_day &exc_en_day;

run;

Ответы [ 2 ]

0 голосов
/ 02 мая 2019

Макрос-код оценивается ДО запуска SAS-кода, который он генерирует. Итак, вы сказали SAS запустить этот код:

%let exc_st_day = '30APR2019'd;
%let exc_en_day = '30APR2019'd;
%let exc_st_day = '01MAY2019'd;
%let exc_en_day = '01MAY2019'd;
%let exc_st_day = '02MAY2019'd;
%let exc_en_day = '02MAY2019'd;
%let exc_st_day = '03MAY2019'd;
%let exc_en_day = '03MAY2019'd;
%let exc_st_day = '04MAY2019'd;
%let exc_en_day = '06MAY2019'd;
%put &exc_st_day &exc_en_day;

data _null_;
if weekday(today()) = 5 then do;
end;
else if weekday(today()) = 6 then do;
end;
else if weekday(today()) = 2 then do;
end;
else if weekday(today()) = 3 then do;
end;
else if weekday(today()) = 4 then do;
end;
run;

Если вы хотите создать значения макропеременных из шага данных, используйте функцию CALL SYMPUTX(). Или, если вам действительно нужно вставить начальные и / или завершающие пробелы в значение макропеременной, используйте более старую функцию CALL SYMPUT().

0 голосов
/ 02 мая 2019

Вам нужно использовать CALL SYMPUTX () для создания макропеременных, а не% LET в шаге данных.

if weekday(today()) = 5 then do;
    call symputx('exc_st_day', '30APR2019'd);
    call symputx('exc_en_day', '30APR2019'd);
end;
...