SAS 宏循环遍历多个 'yyyy-mm-dd' 带单引号的日期格式

SAS Macro looping through multiple 'yyyy-mm-dd' date format with single quotes

我需要在 SAS 宏中遍历某些日期格式,例如 'yyyy-mm-dd',因为我的主要查询主体使用 Teradata SQL Pass-Thru 但是我下面的代码在 %let [=26 处不起作用=] 没有选择 '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,问题就会得到解决。

你的 %SCAN() 函数调用是错误的。

75    %let list = '2020-03-11' '2020-03-18';
76    %put %qscan(&list,1);
'2020

由于您没有告诉 %SCAN() 使用什么分隔符,因此它使用了任何默认的分隔符集,其中包括连字符。​​

尝试告诉它只能使用 space 作为分隔符。

%do i=1 %to %sysfunc(countw(&first_dt_list, %str( )));
%let wk_first_dt = %scan(&first_dt_list, &i,%str( ));