在SAS中,在数据步骤之外,用空白替换宏变量中的字符的最佳方法是什么?

时间:2009-02-06 17:17:28

标签: sas sas-macro

在SAS中,在数据步骤之外,用空白替换宏变量中的字符的最佳方法是什么?

TRANSLATE似乎是一个很好用的功能。但是,对此函数使用%SYSFUNC时,参数不会用引号括起来。你如何表明应该用空白作为替代品?

3 个答案:

答案 0 :(得分:5)

%str()(在parens之间有空格)可用于指示此参数的空白。还要小心TRANSLATE ...第二个参数是替换字符...但是在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

答案 1 :(得分:4)

宏语言中没有引号。正在使用的唯一引号字符是&%等,以指示文本应被解释为宏“运算符”。空格由%str( )表示,如上面在Carolina的帖子中所示。

答案 2 :(得分:3)

您可以使用perl reg ex,例如:

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