有一个简单的问题 - 我需要删除标点并用空格替换字符(即:如果我有一个包含*的字段,我需要用空格替换它)。
我似乎无法把它弄好 - 我原来这样做是为了删除它,但我发现在某些情况下我的字符串被挤压在一起。
思想?
STRING2 = compress(STRING, ":,*~’°-!';()®""@#$%^&©+=\/|[]}{]{?><ÉÑËÁ’ÍÓÄö‘—È…...");
答案 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