有一個簡單的問題 - 我需要刪除標點並用空格替換字符(即:如果我有一個包含*的字段,我需要用空格替換它)。SAS - 用空格替換角色?
我似乎無法做到 - 我原本是這樣做的,只是刪除它,但我發現在某些情況下,我的字符串被擠在一起。
想法?
STRING2 = compress(STRING, ":,*~’°-!';()®""@#$%^&©+=\/|[]}{]{?><ÉÑËÁ’ÍÓÄö‘—È…...");
有一個簡單的問題 - 我需要刪除標點並用空格替換字符(即:如果我有一個包含*的字段,我需要用空格替換它)。SAS - 用空格替換角色?
我似乎無法做到 - 我原本是這樣做的,只是刪除它,但我發現在某些情況下,我的字符串被擠在一起。
想法?
STRING2 = compress(STRING, ":,*~’°-!';()®""@#$%^&©+=\/|[]}{]{?><ÉÑËÁ’ÍÓÄö‘—È…...");
嘗試使用翻譯功能,看看它是否適合您的需要:
data want;
STRING = "!';AAAAÄAA$";
STRING2 = translate(STRING,' ',':;,*~''’°-!()®@""#$%^&©+=\/|[]}{]{?><ÉÑËÁ’ÍÓÄö‘—È…...');
run;
輸出:
STRING STRING2
!';AAAAÄAA$ AAAA AA
嘗試TRANSLATE()
功能。
TRANSLATE(SOURCE,TO,FROM);
data test;
string = "1:,*2~’°-ÍÓ3Äö‘—È…...4";
string2 = translate(string,
" ",
":,*~’°-!';()®""@#$%^&©+=\/|[]}{]{?><ÉÑËÁ’ÍÓÄö‘—È…...");
put string2=;
run;
我得到
string2=1 2 3 4
雖然翻譯功能,可以讓你在那裏,你也可以在SAS使用正則表達式。它更優雅,但你需要逃避實際的正則表達式模式中的字符。
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/[^ A-Z]//」, - 1,old);
run;
proc print data = have nobs;
run;
輸出 -
新老
AM;'IGH}|GH AM IGH GH
的COMPRESS()
功能將刪除字符。如果您想用空格替換它們,則使用TRANSLATE()
函數。如果要將多個空白縮減爲單個空白,請使用COMPBL()
函數。
STRING2 = compbl(translate(STRING,' ',":,*~’°-!';()®""@#$%^&©+=\/|[]}{]{?><ÉÑËÁ’ÍÓÄö‘—È…..."));
比列出了需要轉換爲空格字符,而您可以使用COMPRESS()
扭轉的問題,列出了應保持的字符。
所以本例中將使用的修飾語ad
上COMPRESS()
函數調用來傳遞字符串不是字母數字字符的TRANSLATE()
函數調用因此它們將被空格替換字符。
STRING2 = compbl(translate(STRING,' ',compress(STRING,' ','ad')));