【问题标题】:SAS remove the last characters if special如果特殊,SAS删除最后一个字符
【发布时间】:2022-01-12 08:12:39
【问题描述】:

我有一个名为 response 的变量的 sas 数据集,它有以下记录:

等等。

这些都是相同的记录,我需要删除最后一个特殊的字符并将记录返回为

当我使用压缩函数时,它会删除中间的星号并返回: TrailerOffer 这不是我想要的。 有人可以帮我编码吗?如果这些是特殊的,我需要删除最后一个字符。

【问题讨论】:

    标签: sql sas substring sas-macro


    【解决方案1】:

    您可以使用正则表达式字符类来指定“特殊”尾随字符。在此示例替换模式中,任何不是字母或数字的字符都将被删除。在$ 之前需要\s*,因为当SAS 字符变量的值被传递给正则表达式引擎时,它们的尾随空格。

    SAS documentation中了解更多关于正则表达式类分组的信息

    data have;
    length response $20.; input response; datalines;
    Trailer*Offer
    Trailer*Offer*
    Trailer*Offer???
    Trailer*Offer?...
    Offer#1
    Offer#1?
    Offer#1*?
    ;
    data want;
      set have;
      response = prxchange ('s/[^a-z0-9]+\s*$//i', 1, response);
    run;
    

    【讨论】:

    • 谢谢,这很有帮助!
    【解决方案2】:

    使用PRXCHANGE

    prx=prxchange("s/^W*(.*?)\W*$/$1/",-1, response);
    

    将删除尾随的特殊字符

    data have;
    length response $20.;
    response="Trailer*Offer";output;
    response="Trailer*Offer*";output;
    response="Trailer*Offer???";output;
    response="Trailer*Offer?...";output;
    run;
    
    data _null_;
    set have;
    prx=prxchange("s/^W*(.*?)\W*$/$1/",-1, response);
    put prx;
    run;
    
     77         
     78         data _null_;
     79         set have;
     80         prx=prxchange("s/^W*(.*?)\W*$/$1/",-1, response);
     81         put prx;
     82         run;
     
     Trailer*Offer
     Trailer*Offer
     Trailer*Offer
     Trailer*Offer
    

    【讨论】:

    • 感谢 Kermit,不知道如何使用 prxchange,这很有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    相关资源
    最近更新 更多