[英]SAS - replacing a character with a space?
有一個簡單的問題 - 我需要刪除標點符號並用空格替換字符(即:如果我有一個包含*的字段,我需要用空格替換它)。
我似乎無法做到正確 - 我最初這樣做是為了刪除它,但我發現在某些情況下我的字符串被擠壓在一起。
思考?
STRING2 = compress(STRING, ":,*~’°-!';()®""@#$%^&©+=\/|[]}{]{?><ÉÑËÁ’ÍÓÄö‘—È…...");
COMPRESS()
函數將刪除字符。 如果要用空格替換它們,請使用TRANSLATE()
函數。 如果要將多個空格減少為單個空白,請使用COMPBL()
函數。
STRING2 = compbl(translate(STRING,' ',":,*~’°-!';()®""@#$%^&©+=\/|[]}{]{?><ÉÑËÁ’ÍÓÄö‘—È…..."));
您可以使用COMPRESS()
將問題轉移到列出應保留的字符,而不是列出需要轉換為空格的字符。
因此,此示例將使用COMPRESS()
函數調用上的修飾符ad
將STRING中不是字母數字字符的字符傳遞給TRANSLATE()
函數調用,以便它們將替換為空格。
STRING2 = compbl(translate(STRING,' ',compress(STRING,' ','ad')));
嘗試使用translate功能,看看它是否符合您的需求:
data want;
STRING = "!';AAAAÄAA$";
STRING2 = translate(STRING,' ',':;,*~''’°-!()®@""#$%^&©+=\/|[]}{]{?><ÉÑËÁ’ÍÓÄö‘—È…...');
run;
輸出:
STRING STRING2
!';AAAAÄAA$ AAAA AA
嘗試TRANSLATE()
函數。
翻譯(SOURCE,TO,FROM);
data test;
string = "1:,*2~’°-ÍÓ3Äö‘—È…...4";
string2 = translate(string,
" ",
":,*~’°-!';()®""@#$%^&©+=\/|[]}{]{?><ÉÑËÁ’ÍÓÄö‘—È…...");
put string2=;
run;
我明白了
string2=1 2 3 4
雖然翻譯功能可以幫助您,但您也可以在SAS中使用REGEX。 它更優雅,但您需要在實際的正則表達式模式中轉義字符。
data want;
input string $60.;
length new_string $60.;
new_string = prxchange('s/([\:\,\*\~\’\°\-\!\'||"\'"||';\(\)\®\"\"\@\#\$\%\^\&\©\+\=\\\/\|\[\}\{\]\{\\\?\>\<\É\Ñ\Ë\Á\’\Í\Ó\Ä\ö\‘\—\È\…\.\.\.\]])/ /',-1,string);
datalines;
Cats, dogs, and anyone else!
;
在正則表達式的幫助下嘗試它。
數據有;
old =“AM;'IGH} | GH”;
new = prxchange(“s / [^ AZ] / /”, - 1,old);
跑;
proc print data =有nobs;
跑;
輸出 -
老新
AM;'IGH}|GH AM IGH GH
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.