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

问题描述 投票:0回答:1

我有一个宏像:

%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这来得到我的预期结果或我只是做错了(再次:))

谢谢

sas
1个回答
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)

© www.soinside.com 2019 - 2024. All rights reserved.