我有一个宏像:
%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包含8个左右的uuid,形式为12345-123123-1234123-2342等
当它运行时,它只是从put命令通过uuid8打印uuid1
如果我将put命令更改为:
%put %superq(&uuid)
然后按预期打印所有uuid,即12345-123123-1234123-2342
问题是为什么我需要superq这来得到我的预期结果或我只是做错了(再次:))
谢谢
在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)