【发布时间】:2021-09-24 04:09:26
【问题描述】:
我需要在 SAS 宏中循环某些日期格式,例如“yyyy-mm-dd”,因为我的主要查询主体使用 Teradata SQL Pass-Thru,但是我下面的代码在 %let wk_first_dt 没有获取 'yyyy 的情况下不起作用-mm-dd' 格式。错误说
%MACRO DO_APPEND;
%let first_dt_list = '2020-03-11' '2020-03-18';
%local i wk_first_dt;
%do i=1 %to %sysfunc(countw(&first_dt_list));
%let wk_first_dt = %scan(&first_dt_list, &i);
...
proc sql
...
where BILL_DT >= Date &wk_first_dt
AND SL_INVC.BILL_DT <= (Date &wk_first_dt + 7)
...
quit;
...
%END;
%MEND;
%DO_APPEND;
ERROR: Literal contains unmatched quote.
ERROR: The macro DO_APPEND will stop executing.
做了很多研究,我认为问题是由于这种格式的单引号“yyyy-mm-dd”,因为在 SAS 宏中对单引号进行了特殊处理。然而,最受欢迎的建议像
%let first_dt_list = %str(%')yyyy-mm-dd.%str(%')
在我的情况下不起作用。请指出我正确的方向。提前致谢!
顺便说一句,在上面的代码中,如果我将 %scan(&first_dt_list, &i) 更改为 '2020-03-11',整个宏都可以工作 - 但我只需要循环多个日期。这让我相信一旦将 'yyyy-mm-dd' 传递给 %let wk_first_dt,问题就会得到解决。
【问题讨论】:
-
您是否打开了 MPRINT 选项,以便在 LOG 中看到您的宏正在生成的 SAS 代码?
标签: loops date sas-macro single-quotes