SAS - 用空格替换角色?

时间:2015-12-29 15:07:49

标签: regex string text sas

有一个简单的问题 - 我需要删除标点并用空格替换字符(即:如果我有一个包含*的字段,我需要用空格替换它)。

我似乎无法把它弄好 - 我原来这样做是为了删除它,但我发现在某些情况下我的字符串被挤压在一起。

思想?

STRING2 = compress(STRING, ":,*~’°-!';()®""@#$%^&©+=\/|[]}{]{?><ÉÑËÁ’ÍÓÄö‘—È…...");     

5 个答案:

答案 0 :(得分:3)

COMPRESS()函数将删除字符。如果要用空格替换它们,请使用TRANSLATE()函数。如果要将多个空格减少为一个空格,请使用COMPBL()函数。

STRING2 = compbl(translate(STRING,' ',":,*~’°-!';()®""@#$%^&©+=\/|[]}{]{?><ÉÑËÁ’ÍÓÄö‘—È…...")); 

不是列出需要转换为空格的字符,而是可以使用COMPRESS()将问题转化为列出应保留的字符。

因此,此示例将使用ad函数调用上的修饰符COMPRESS()将STRING中不是字母数字字符的字符传递给TRANSLATE()函数调用,以便它们将被替换为空格。

STRING2 = compbl(translate(STRING,' ',compress(STRING,' ','ad'))); 

答案 1 :(得分:0)

尝试使用翻译功能,看看它是否符合您的需求:

data want;
STRING = "!';AAAAÄAA$";
STRING2 = translate(STRING,' ',':;,*~''’°-!()®@""#$%^&©+=\/|[]}{]{?><ÉÑËÁ’ÍÓÄö‘—È…...');
run;

输出:

STRING         STRING2

!';AAAAÄAA$ AAAA AA

答案 2 :(得分:0)

尝试TRANSLATE()功能。

翻译(SOURCE,TO,FROM);

data test;
string = "1:,*2~’°-ÍÓ3Äö‘—È…...4";
string2 = translate(string,
   "                                                    ",
   ":,*~’°-!';()®""@#$%^&©+=\/|[]}{]{?><ÉÑËÁ’ÍÓÄö‘—È…...");
put string2=;
run;

我得到了

string2=1   2      3         4

答案 3 :(得分:0)

虽然翻译功能可以帮助您,但您也可以在SAS中使用REGEX。它更优雅,但您需要在实际的正则表达式模式中转义字符。

data want; 
   input string $60.; 
   length new_string $60.; 
   new_string = prxchange('s/([\:\,\*\~\’\°\-\!\'||"\'"||';\(\)\®\"\"\@\#\$\%\^\&\©\+\=\\\/\|\[\}\{\]\{\\\?\>\<\É\Ñ\Ë\Á\’\Í\Ó\Ä\ö\‘\—\È\…\.\.\.\]])/ /',-1,string); 
   datalines; 
Cats, dogs, and anyone else!
;

答案 4 :(得分:0)

在正则表达式的帮助下尝试 数据有;
  old =&#34; AM;&#39; IGH} | GH&#34;;
  new = prxchange(&#34; s / [^ A-Z] / /&#34;, - 1,old);

跑;
proc print data =有nobs;
运行;

OUTPUT-
        旧的新

 AM;'IGH}|GH    AM  IGH  GH