Можно ли передать строку с триггером макроса в качестве параметра макроса? См. приведенный ниже пример кода:
options mprint;
%let string5='%abc%def%';
%macro test(string);
data _null_;
call execute('%test2('||&string.||')');
run;
%mend;
%macro test2(string2);
data test3;
a=%str(%')&string2.%str(%');
run;
%mend;
%test(&string5);
Этот код выполнился успешно, но попытался вызвать макрос %abc и %def, что привело к появлению предупреждений.
Если я попытался поместить его в кавычки, чтобы замаскировать строку, это дало синтаксическую ошибку, как показано ниже:
options mprint;
%let string5='%abc%def%';
%macro test(string);
data _null_;
call execute('%test2('||%superQ(string)||')');
run;
%mend;
%macro test2(string2);
data test3;
a=%str(%')&string2.%str(%');
run;
%mend;
%test(&string5);
ERROR 22-322: Syntax error, expecting one of the following: a name, a quoted string, a numeric constant, a datetime constant, a missing value, arrayname, (, +, -, INPUT, NOT, PUT, ^, _NEW_, ~.
Есть ли способ исправить это без предупреждений? Заранее спасибо!
%nrstr()
очень полезно при вызове макросов через CALL EXECUTE, но я не уверен, имеет ли это значение для вашей проблемы.call execute(cats('%nrstr(%test2)(',symget('string'),')');
- person Tom   schedule 20.04.2017