【发布时间】:2014-09-10 12:26:54
【问题描述】:
我正在尝试编写健壮的代码来为宏变量赋值。我希望宏变量的名称取决于来自变量“子组”的值。因此子组可以等于 1、2 或 45 等,因此具有宏变量名称 trta_1、trta_2、trt_45 等。
我遇到困难的地方是调用宏变量名。所以不要打电话给例如&trta_1 我想调用 &trta_%SCAN(&subgroups, &k),它在第一次迭代时解析为 trta_1。我在宏变量名称中使用了 %SCAN 函数,该函数抛出警告“警告:明显的符号引用 TRTA_ 未解析。”。但是,宏变量已创建并分配了值。
如何解决该警告?有没有我可以使用 %SCAN 函数运行的函数来让它工作?
data data1 ;
input subgroup trta trtb ;
datalines ;
1 30 58
2 120 450
3 670 3
run;
%LET subgroups = 1 2 3 ;
%PUT &subgroups;
%MACRO test;
%DO k=1 %TO 3;
DATA test_&k;
SET data1;
WHERE subgroup = %SCAN(&subgroups, &k);
CALL SYMPUTX("TRTA_%SCAN(&subgroups, &k)", trta, 'G');
CALL SYMPUTX("TRTB_%SCAN(&subgroups, &k)", trtb, 'G');
RUN;
%PUT "&TRTA_%SCAN(&subgroups, &k)" "&TRTB_%SCAN(&subgroups, &k)";
%END;
%MEND test;
%test;
【问题讨论】:
-
您在宏中使用了
&subgroups,但在外部使用了&subtest? -
@dennis suter 啊,是的,我正在测试它,忘记改回来了,谢谢!现在更新了。