循环中SAS宏变量未正常解析问题求助
解决SAS宏变量在单引号中无法解析的问题
核心原因:SAS宏处理器不会解析单引号内的宏变量,所以循环中的&m在'&m. day'里无法被替换为1到10的循环数值。
解决方案1:替换单引号为双引号
这是最简洁的处理方式,SAS会自动解析双引号内的宏变量,同时PostgreSQL支持用双引号包裹INTERVAL的字符串参数:
%do m = 1 %to 10; proc sql noprint; connect to POSTGRES (&prep_con_str); select run_date into :m_batch_dt from connection to POSTGRES ( select min(run_date) - INTERVAL "&m. day" as run_date from dummy; ); disconnect from POSTGRES; quit; %end;
解决方案2:强制在单引号内解析宏变量(需保留单引号时)
如果因数据库语法限制必须使用单引号,可以通过宏函数先解析变量,再嵌入单引号中:
%do m = 1 %to 10; proc sql noprint; connect to POSTGRES (&prep_con_str); select run_date into :m_batch_dt from connection to POSTGRES ( select min(run_date) - INTERVAL '%superq(m) day' as run_date from dummy; ); disconnect from POSTGRES; quit; %end;
%superq(m)会直接返回宏变量m的当前值,既完成宏替换,还能避免潜在的特殊字符干扰。
内容的提问来源于stack exchange,提问作者Arun P.A
相关产品推荐
相关产品推荐

