В SAS, вне шага данных, каков наилучший способ заменить символ в макропеременной пробелом?
В SAS, вне шага данных, каков наилучший способ заменить символ в макропеременной пробелом?
Кажется, что TRANSLATE
было бы хорошей функцией для использования. Однако при использовании %SYSFUNC
с помощью этой функции параметры не заключаются в кавычки. Как вы указываете, что бланк следует использовать в качестве замены?
3 ответа
На макроязыке нет кавычек. Единственные символы кавычек, которые используются, это &
, %
и т.д., чтобы указать, что текст должен интерпретироваться как макрос "оператор". Бланк представлен %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***
*/