我在SAS中使用宏来遍历特定库中的数据表.我将元数据信息放在数据空步骤中,并与where语句和我的宏变量进行比较.
我的SQL步骤如下:
proc sql;
select quote(trim(code)) into :procedures separated by ', ' from procedures;
quit;
Run Code Online (Sandbox Code Playgroud)
code包含值的某些值,如"45.10"和"G0102",因此不能强制转换为数字.该宏包含以下行:
%macro filter_codes(indata, outdata);
data &outdata;
set &indata(where = (code in (&procedures)));
run;
%mend;
Run Code Online (Sandbox Code Playgroud)
但是使用"quote"函数进行双引号时,十进制值会产生问题.
我可以用单引号分隔值吗?
编辑:问题是由于filter_codes宏在一个调用执行步骤(在一系列数据集中)运行的事实引起的,并且在双引号内的宏变量中解析的双引号将结束调用execute.
试试这个:
proc sql;
select catt("'", code, "'") into :procedures separated by ', ' from procedures;
quit;
Run Code Online (Sandbox Code Playgroud)
还要修复set语句中的where选项:
set &indata(where=(code in (&procedures)));
Run Code Online (Sandbox Code Playgroud)