Макропеременные SAS всегда символьные.Аргументы для макрофункций всегда символьны и, как правило, не требуют дополнительного слоя цитирования макрокоманды, и определенно не будут, если аргументы должны быть литералами.
Вы пробовали это сначала?
%let string = STACKOVERFLOW;
%let string_tweaked = %sysfunc(tranwrd(&string),T,Test);
%put NOTE: string_tweaked = &string_tweaked;
Содержат ли значения макроса встроенные одинарные кавычки?
%let string = %str(S%'T%'ACKOVERFLOW);
%let string_tweaked = %qsysfunc(tranwrd(&string,'T','Test'));
%put NOTE: string_tweaked = &string_tweaked;
Второй пример кода аналогичен следующему шагу кода DATA (область действия которого отличается от области действия среды MACRO).Значения строки шага DATA указываются в явном виде: двойная ("
) или одинарная ('
)
data _null_;
string = "S'T'ACKOVERFLOW";
string_tweaked = tranwrd(string,"'T'","'Test'");
put "NOTE: " string_tweaked=;
run;