2015-12-29 61 views
0

有一個簡單的問題 - 我需要刪除標點並用空格替換字符(即:如果我有一個包含*的字段,我需要用空格替換它)。SAS - 用空格替換角色?

我似乎無法做到 - 我原本是這樣做的,只是刪除它,但我發現在某些情況下,我的字符串被擠在一起。

想法?

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

回答

0

嘗試使用翻譯功能,看看它是否適合您的需要:

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

輸出:

STRING   STRING2 

!';AAAAÄAA$ AAAA AA 
0

嘗試TRANSLATE()功能。

TRANSLATE(SOURCE,TO,FROM);

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

我得到

string2=1 2  3   4 
0

雖然翻譯功能,可以讓你在那裏,你也可以在SAS使用正則表達式。它更優雅,但你需要逃避實際的正則表達式模式中的字符。

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

請試試用正則表達式。數據有
;
old =「AM;'IGH} | GH」;
new = prxchange(「s/[^ A-Z]//」, - 1,old);
run;
proc print data = have nobs;
run;

輸出 -
新老

AM;'IGH}|GH AM IGH GH 
3

COMPRESS()功能將刪除字符。如果您想用空格替換它們,則使用TRANSLATE()函數。如果要將多個空白縮減爲單個空白,請使用COMPBL()函數。

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

比列出了需要轉換爲空格字符,而您可以使用COMPRESS()扭轉的問題,列出了應保持的字符。

所以本例中將使用的修飾語adCOMPRESS()函數調用來傳遞字符串不是字母數字字符的TRANSLATE()函數調用因此它們將被空格替換字符。

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