使用 DATA NULL 将 let 变量分配给 WHERE 语句

Assigning let variables to WHERE statement using DATA NULL

您好,我正在尝试使用 DATA NULL 步骤根据不同的条件为变量赋值。 NULL 语句中的这个变量将被分配给以下 DATA 步中的 WHERE 语句。

理想情况下,如果我今天 运行 它(星期四是 5)代码应该 return 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;

您需要使用 CALL SYMPUTX() 来创建宏变量,而不是数据步骤中的 %LET。

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

宏代码在它生成 运行s 的 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() 函数。或者,如果您确实需要在宏变量值中插入前导 and/or 尾随空格,请使用较旧的 CALL SYMPUT() 函数。