我正在尝试在SAS中手动插入字符串,并且需要删除特定的特殊字符(也许通过插入它们的列表),而又不能删除单词之间的空格。
我发现结合使用compbl
和transtrn
的可能解决方案,以删除特殊字符并将其替换为空格,并用compbl
减少为空白,但这需要多个步骤。
我想知道是否有一个函数可以让我一步完成。我尝试使用compress函数(使用'k'修饰符以仅保留字母和数字),但是它消除了单词之间的空格。
我想从这样的字符串开始:
O'()n?e /, ^P.iece
收件人:
One Piece
两个单词之间有一个空格。
如果有人可以帮助我,那就太好了!
答案 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 |
+--------------------+------------+