【发布时间】:2017-06-26 07:19:10
【问题描述】:
如果每个列表中有多个东西,这段代码将无法正确运行。
%macro loop(list1, list2);
%let n=%sysfunc(countw(&list1));
%do i=1 %to &n;
%let O_list1 = %scan(&list1, &i, '');
%let O_list2 = %scan(&list2, &i, '');
data taxes;
food=3*&O_List1;
materials = 4*&O_List2
%end;
%mend;
%loop(1, 4);
/* %loop(1 3, 4 6) */
这里的输出是 3 和 16。如果我按照注释部分中的方式进行循环,则代码不会运行,我似乎无法弄清楚原因。谢谢!
【问题讨论】:
-
与您的错误无关,但最好添加
run;语句来结束您的 DATA 步骤。 -
因为您告诉 %SCAN() 您的列表由单引号分隔,所以您的示例在每个列表中只有一个项目。这意味着嵌入该项目的空间会使您的宏生成无效的 SAS 代码。此外,宏的整体逻辑也存在缺陷,因为如果列表中有多个项目,它只会继续覆盖相同的输出数据集。宏的总体目标是什么?
-
@Tom 感谢您指出我添加了 a_&I 来解决覆盖问题。在我的真实程序中,该程序的目标是同时迭代两个列表。这样我就可以拿出一张我需要的桌子。现在我已经弄清楚了,我需要弄清楚如何附加所有创建的表。
标签: parameters macros sas