Tranwrd только одно письмо в SAS - PullRequest
0 голосов
/ 30 мая 2018

Как я могу процитировать только одну букву в sas?

%sysfunc(tranwrd(%quote(&string),%quote(T),%quote('Test')));

Проблема в том, что когда в строке есть буквы 'T' и 'TR', оба из них переводятся в 'Test'

1 Ответ

0 голосов
/ 30 мая 2018

Макропеременные 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;
...