В SAS, за пределами этапа обработки данных, каков наилучший способ заменить символ в макропеременной на пробел?
Вопрос
В SAS, за пределами этапа обработки данных, каков наилучший способ заменить символ в макропеременной на пробел?
Кажется , что TRANSLATE
было бы хорошей функцией для использования.Однако при использовании %SYSFUNC
с помощью этой функции параметры не заключаются в кавычки.Как вы указываете, что пробел следует использовать в качестве замены?
Решение
В макроязыке нет кавычек.Единственными символами , заключенными в кавычки , которые используются , являются &
, %
и т.д.указать, что текст должен интерпретироваться как макрос "operator".Пробел представлен %str( )
как указано выше в сообщении Каролины.
Другие советы
%str( ) (с пробелом между скобками) может использоваться для указания пробела для этого параметра.Также будьте осторожны с TRANSLATE ... 2-й параметр - это символ замены ... однако в TRANWRD он перевернут.
%macro test ;
%let original= translate_this_var ;
%let replaceWithThis= %str( ) ;
%let findThis= _ ;
%let translated= %sysfunc(translate(&original, &replaceWithThis, &findThis)) ;
%put Original: &original ***** TRANSLATEd: &translated ;
%mend ;
%test;
%macro test2 ;
%let original= translate_this_var ;
%let replaceWithThis= %str( ) ;
%let findThis= _ ;
%let tranwrded= %sysfunc(tranwrd(&original, &findThis, &replaceWithThis)) ;
%put Original: &original ***** TRANWRDed: &tranwrded ;
%mend ;
%test2
вместо этого вы можете использовать perl reg ex, например:
%put ***%sysfunc(prxchange(s/x/ /, -1, abxcdxxf))***;
/* on log
***ab cd f***
*/