【发布时间】:2015-10-22 15:33:17
【问题描述】:
我有一个包含多个“XO 代码”的 ID 列表。我想创建一个宏,它将遍历这些 ID,并使用与相应 XO 代码对应的 where 语句为每个 ID 创建一个表。例如:
%let ID_77= '35X02','35X04';
%let DnO_IDs= &ID_77; /intends to add more &ID_ numbers/
%macro loop;
proc sql;
%do k=1 %to %sysfunc(countw(&DnO_IDs_Ids.));
%let ID= %scan(&DnO_IDs.,&k.);
create table EP_&ID as
select * from table
where XO in ("&ID.") and AY>=(&CurrY-14);
%end;
quit;
%mend;
%loop;
我收到此错误: 错误:在需要数字操作数的 %EVAL 函数或 %IF 条件中找到字符操作数。条件是: '35X04' 错误:宏函数 %SCAN 的参数 2 不是数字。 错误:宏 LOOP 将停止执行。
【问题讨论】:
-
您的值列表有引号。因此,当您扫描列表时,您会将引号放入宏变量中。因此,您正在尝试创建一个名为
EP_'35X02'的表。您应该从原始列表中删除引号或从新的ID宏变量中删除它们。 -
&DnO_IDs_Ids.在做什么?与您在%let声明中的内容相比,这是一个额外的&ids。