为什么&bob不在%marco中时,为什么%superq(&bob)显示变量?

时间:2019-04-26 09:13:24

标签: sas

我有一个类似的宏:

%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

问题是为什么我需要对此进行超级处理才能获得预期的结果,或者我只是做错了什么(再次:))

谢谢

1 个答案:

答案 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)