【问题标题】:Replace specific characters (a list of them) in a string without removing blanks替换字符串中的特定字符(它们的列表)而不删除空格
【发布时间】:2019-08-29 08:06:16
【问题描述】:

我正在尝试在 SAS 中使用手动插入的字符串,我需要删除特定的特殊字符(可能通过插入它们的列表)而不删除单词之间的空格。

我找到了一个可能的解决方案,结合使用 compbltranstrn 来删除特殊字符并用空格替换它们,通过 compbl 减少到一个,但这需要多个步骤。

我想知道是否有一个功能可以让我一步完成。我尝试过使用 compress 功能(使用 'k' 修饰符只保留字母和数字),但它会删除单词之间的空格。

我想从一个这样的字符串开始:

O'()n?e /, ^P.iece

收件人:

One Piece

两个词之间有一个空格。

如果有人可以帮助我,那就太棒了!

【问题讨论】:

    标签: string sas


    【解决方案1】:

    使用compress函数的下一个标签:

    k -- Keep 字符代替它

    a -- A字母字符

    s -- S步调字符

    d -- Digits

    然后,使用函数COMPBL

    代码:

    data have;
       value="O'()n?e /, ^P.iece";
    run;
    
    data want;
       set have;
       value_want=COMPBL((compress(value,,"kasd"));
    run;
    
            
    

    所以:

    +--------------------+------------+
    |       value        | value_want |
    +--------------------+------------+
    | O'()n?e /, ^P.iece | One Piece  |
    +--------------------+------------+
    

    【讨论】:

    • 太棒了!它完美无缺;非常感谢你的帮助,我不知道我可以把更多的修饰符放在一起。
    【解决方案2】:

    您可以使用正则表达式和prxchage

    data have;
       value="O'()n?e /, ^P.iece";
    run;
    
    data want;
       set have;
       value_want=value_want=prxchange("s/\s\s+/ /",-1,prxchange("s/[^a-zA-Z0-9\s]*//",-1,value));
    run;
    

    结果:

    +--------------------+------------+
    | value              | value_want |
    +--------------------+------------+
    | O'()n?e /, ^P.iece | One Piece  |
    +--------------------+------------+
    

    【讨论】:

    • 非常感谢您的帮助,我以前从未使用过正则表达式,但您的解决方案让我想立即开始研究它们,太棒了!
    猜你喜欢
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 2021-07-16
    • 1970-01-01
    • 2013-12-08
    • 1970-01-01
    相关资源
    最近更新 更多