簡體   English   中英

SAS - 用空格替換角色?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM