В контексте разрешенной макропеременной, которую необходимо заключить в двойные кавычки, например, значение параметра url=
, поместите %superq
в двойные кавычки - "%superq(<macro-var-name>)"
Попробуйте
…
url = "%superq(nextLink)"
Если ссылка продолжает вызывать проблемы, вы можете попробовать
url = "%qsysfunc(urlencode(%superq(nextLink)))"
Вызов макроса один раз для каждой строки в наборе данных управления
Существует множество способов., например
- Стек 1000 вызовов с помощью
data _null_;
и call execute(…
- Proc SQL
select nextLink into :link1-
для создания 1000 макропеременных - Открыть набор данныхс
%let ds=%sysfunc(open(…
и цикл по 1000 строк - %do %while (%sysfunc(fetch(&ds) = 0))
Пример кода для второго элемента маркера:
Этот пример передает макропеременную из макроса 'looping' вмакрос «рабочий».Когда передается имя макропеременной, макрос var не нужно разрешать и заключать в кавычки для перехода к работнику.Вместо этого работа получает макрос var (он же имя символа) и superq
разрешает его в кавычках для использования при генерации исходного кода.По сути, передача макроса var похожа на традиционную концепцию передачи по ссылке.
data have;
do linknum = 1 to 25;
link = cats("place=", byte(64+linknum),'&extra="zoom=',linknum,'"&key=MYAPIKEY');
output;
end;
run;
%macro processLink(link_mvar=);
%put url="%sysfunc(urlencode(%superq(&link_mvar)))";
%mend;
%macro processLinks (data=);
proc sql;
reset noprint;
select link into :link1- from &data;
quit;
%local i;
%do i = 1 %to &sqlobs;
%* pass name of macro variable to macro;
%processLink (link_mvar=link&i);
%end;
%mend;
%processLinks(data=have)