почему% superq (& bob) отображает переменную, когда & bob не отображается в% marco? - PullRequest
0 голосов
/ 26 апреля 2019

у меня есть такой макрос:

%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 и т. Д.

, когда он запускается, он просто печатает uuid1 через uuid8 из путкоманда

если я изменяю команду put на:

%put %superq(&uuid)

, то она печатает все UUID, как и ожидалось, т.е. 12345-123123-1234123-2342

вопрос, почему янужно superq это, чтобы получить ожидаемый результат, или я просто делаю что-то не так (снова :))

Спасибо

1 Ответ

1 голос
/ 26 апреля 2019

В макросе processLink переменная 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)

...