String 替换字符串中的特定字符(它们的列表),而不删除空格

String 替换字符串中的特定字符(它们的列表),而不删除空格,string,sas,String,Sas,我试图在SAS中使用手动插入的字符串,我需要删除特定的特殊字符(可能是通过插入一系列字符),而不需要删除单词之间的空格 我已经找到了一个可能的解决方案,将compbl和transtrn组合起来,删除特殊字符并用空格替换,通过compbl减少为一个,但这需要多个步骤 我想知道是否有一个函数可以让我一步完成这项工作。我试过使用compress函数(使用“k”修饰符只保留字母和数字),但它删除了单词之间的空格 我想从这样的字符串开始: O'()n?e/,^p.iece 致: 一件式 两个词之间只有一个

我试图在SAS中使用手动插入的字符串,我需要删除特定的特殊字符(可能是通过插入一系列字符),而不需要删除单词之间的空格

我已经找到了一个可能的解决方案,将
compbl
transtrn
组合起来,删除特殊字符并用空格替换,通过
compbl
减少为一个,但这需要多个步骤

我想知道是否有一个函数可以让我一步完成这项工作。我试过使用compress函数(使用“k”修饰符只保留字母和数字),但它删除了单词之间的空格

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

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

致:

一件式

两个词之间只有一个空格


如果有人能帮我,那就太棒了

您可以使用regex和
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  |
+--------------------+------------+

使用
压缩
功能的下一个标记:

k--keep字符代替它

a--alphabetic chars

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  |
+--------------------+------------+