【问题标题】:SAS: Macros: Substring and ReplacementSAS:宏:子字符串和替换
【发布时间】:2012-07-12 10:19:16
【问题描述】:

我有两个简单的宏:

%macro One(mvStr);
      /*some code here to replace varOne -> stringOne*/     

%mend One;

%macro Two;
    %local mvStr;
    %let mvStr = "String varOne StringvarOneString";
    %One(&mvStr);
%mend Two;

那么,如何将所有子字符串varOne 替换为stringOne

【问题讨论】:

    标签: macros sas substr


    【解决方案1】:

    这应该做你想要的......

    %macro One(mvStr);
      /*some code here to replace varOne -> stringOne*/     
      %Sysfunc(tranwrd(&mvStr, varOne, StringOne));
    %mend One;
    
    %macro Two;
        %local mvStr;
        %let mvStr = "String varOne StringvarOneString";
        %let mvStr = %One(&mvStr);
    
        %put &mvStr; 
    %mend Two;
    
    %two;
    

    【讨论】:

    • 以 %sysfunc 开头的行末尾不应有分号,因为它将包含在返回值中。如果您想了解为什么这很重要,请尝试在您对 %one 的调用周围添加其他标记,如下所示:%let mvStr = #%One(&mvStr)#;
    【解决方案2】:
    Did not know if you have to have two macros, but would the following suffice?
    
    
    %macro one(mvStr, From, To);
      %local mvStr From To;
      %let &mvStr. = "String &From. String&From.String";
      %put  %Qsysfunc(prxchange(s/&From./&To./,-1,&mvStr.));
      %*put &mvStr.; 
    %mend;
    
    options mprint;
    %one(mvStr,varOne,StringOne)
    

    【讨论】:

      猜你喜欢
      • 2019-09-30
      • 1970-01-01
      • 2021-11-17
      • 2015-09-19
      • 2014-03-07
      • 2019-04-15
      • 2020-12-04
      • 1970-01-01
      • 2017-04-24
      相关资源
      最近更新 更多