我有一个类似的宏:
%macro processme(uuid=);
%put &uuid;
%mend;
从另一个生成uuid的宏调用:
%macro processLinks (data=);
proc sql;
reset noprint;
select uuid into :uuid1 from &data;
quit;
%local i;
%do i = 1 %to &sqlobs;
%processLink (uuid=uuid&i);
%end;
%mend;
,此宏被调用,被调用为:
%processLinks(data=x.entities)
x.entities包含八个左右的uuid,形式为12345-123123-1234123-2342等
运行此命令时,它只会通过put命令中的uuid8打印uuid1
如果我将put命令更改为:
%put %superq(&uuid)
然后按预期打印所有uuid,即12345-123123-1234123-2342
问题是为什么我需要对此进行超级处理才能获得预期的结果,或者我只是做错了什么(再次:))
谢谢
答案 0 :(得分:1)
在procesLink宏变量中,uuid包含uuid1而不是uuid本身,而不是将uuid1提供给superq,然后将其解析为实际的uuid。您也可以使用&&&代替superq
示例
%macro m(b);
%put &b;
%put %superq(&b);
%put &&&b;
%mend;
%let a=5;
%m(b=a)
输出
a
5
5
但更正确的选择是call %m(b=&a)