В SAS, вне шага данных, каков наилучший способ заменить символ в макропеременной пробелом? - PullRequest
1 голос
/ 06 февраля 2009

В SAS, вне шага данных, как лучше всего заменить символ в макропеременной пробелом?

Кажется, что TRANSLATE будет хорошей функцией для использования. Однако при использовании %SYSFUNC с этой функцией параметры не заключаются в кавычки. Как вы указываете, что бланк следует использовать в качестве замены?

Ответы [ 3 ]

5 голосов
/ 06 февраля 2009

% 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
4 голосов
/ 11 февраля 2009

На языке макросов нет кавычек. Используются только те символы кавычек, которые используются * &, % и т. Д., Чтобы указать, что текст следует интерпретировать как макрос "оператор". Пробел представлен %str( ), как указано выше в сообщении Каролины.

3 голосов
/ 22 февраля 2009

вместо этого вы можете использовать perl reg ex, например:

%put ***%sysfunc(prxchange(s/x/ /, -1, abxcdxxf))***;
/* on log
***ab cd  f***
*/
...