В 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***
*/
Другие вопросы по тегам