【发布时间】:2013-08-21 19:54:25
【问题描述】:
我在 SAS 中使用宏来循环特定库中的数据表。我将元数据信息放在 data null 步骤中,并与 where 语句和我的宏变量进行比较。
我的 SQL 步骤如下所示:
proc sql;
select quote(trim(code)) into :procedures separated by ', ' from procedures;
quit;
code 的某些值包含“45.10”和“G0102”等值,因此不能强制转换为数字。宏包含以下行:
%macro filter_codes(indata, outdata);
data &outdata;
set &indata(where = (code in (&procedures)));
run;
%mend;
但是当使用“quote”函数进行双引号时,十进制值会产生问题。
我可以用单引号分隔值吗?
编辑:问题是由于 filter_codes 宏在调用执行步骤中运行(在一系列数据集上)并且在双引号内的宏变量中解析的双引号将结束调用执行。
【问题讨论】:
-
您的代码没有明显的错误,除非您的值本身包含引号。 SAS 使用
'和"的方式肯定没有什么不同,除了宏变量分辨率,这与你的问题在这里似乎无关。我这边的一个简单测试证明它可以正常工作,使用来自sashelp.class的height。你能发布一些显示这不起作用的示例数据吗? -
你是对的,这导致错误的原因是引用的文本在数据 null 步骤中的调用执行命令中被解析。我已经修改了问题。