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

时间:2019-08-29 08:06:16

标签: string sas

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

我发现结合使用compbltranstrn的可能解决方案,以删除特殊字符并将其替换为空格,并用compbl减少为空白,但这需要多个步骤。

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

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

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

收件人:

One Piece

两个单词之间有一个空格。

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

2 个答案:

答案 0 :(得分:2)

将下一个标记用于compress函数:

  

k- K 个字符,而不是替换它

     

a- A 字母字符

     

s- S 节奏字符

     

d- D igits

然后,使用功能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  |
+--------------------+------------+

答案 1 :(得分:1)

您可以使用正则表达式和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  |
+--------------------+------------+