Чтобы решить проблему с первым использованием, просто используйте одинарные кавычки. Это позволит вам создать макропеременную с амперсандом в ней.
data _null_;
call symputx('test','A&A');
run;
Затем используйте некоторый код макроса для добавления кавычек макросов. Я считаю% SUPERQ () самым простым.
%let test=%superq(test);
Если вы делаете таким же образом много макропеременных на одном шаге данных, вы можете использовать функцию RESOLVE () или CALL EXECUTE () чтобы позволить вам запускать% LET сразу после создания макропеременной.
data _null_;
set variable_list;
call symputx(name,value);
call execute(catx(' ','%let',name,'=%superq(',name,');'));
run;