compress函數: 主要用來刪除字符串中的特定字符.
1.compress函數的基本形式
compress(<source><, chars><, modifiers>)
Arguments
source: 指定一個字符串來源
chars: 指定要刪除或者保留的字符列表,需用引號
modifiers: 指定修飾符,不區分大小寫,用來控制compress 函數。
modifiers指定一個修飾符,函數的具體功能。如:
a 增加(A - Z, a - z)到初始字符里(chars)。
d 增加數字到初始字符里(chars)。
f 增加下划線和字母 (A - Z, a - z) 到初始字符里(chars)。
g 增加圖形字符到初始字符里(chars)。
k 不移除初始字符(chars)而是返回這些字符。
l 增加小寫字母(a - z)。
n 增加數字、下划線和字母(A - Z, a - z)。
p 增加標點符號。
s 增加空格, 包括空格、水平制表符、垂直制表符、回車符、換行符和換頁符。
t 剪掉尾部空格。
u 增加大寫字母(A - Z)。
w 增加可印刷的字符。
X 增加十六進制字符
2.compress函數應用舉例
例1.刪除空格:可以直接省去第二和第三個Arguments,也可以明確將空格加入到字符串列表中。
data _null_;
str='Ab cd EF-123-456';
str1=compress(str);
str2=compress(str," ");
put str1= str2=;
run;
例2.使用修飾符刪除小寫字母:
將修飾符設定為"l",代表lowcase,即將所有的小寫字母加入到要刪除的字符列表中;
如不用修飾符"l",也可以直接把所有a-z的小寫字母列入要刪除的字符串列表當中,效果一樣;
本例可以將所有小寫字母和大寫的"E"從指定的字符串中刪除。
data _null_;
str='Ab cd EF-123-456';
str1=compress(str,'E','l');
str2=compress(str,"abcdefghijklmnopqrstuvwxyzE");
put str1= str2=;
run;
例3. 保留字符:只需將"K"或"k"寫入修飾符;
保留數字:只需將"D"或"d"寫入修飾符,或者在字符串列表中加入所有數字。
本例為保留所有數字和"EF"中的字符。
data _null_;
str='Ab cd EF-123-456';
str1=compress(str,'EF','kd');
str2=compress(str,"EF1234567890",'k');
put str1= str2=;
run;
補充:
1.只有source,移除空格。
2.只有source,chars時,從source中移除chars。
3.source,chars,modifiers都有時,modifiers中的K決定保留還是移除。
無K時,移除chars加上modifiers指定的。
例如:
這兩個都是移除數字:
compress(source, "1234567890");
compress(source, , "d");
這兩個是移除數字和加減號:
compress(source, "1234567890+-");
compress(source, "+-", "d");
例1:移除日期中的/
data _null_;
a='2017/04/20';;
b=compress(a,'/');
put b;
run;
log窗口的輸出結果為: 20170420
例2:移除大寫字母和-
data _null_;
x='a 123-456 B-2';
y=compress(x,'-','u');
put y;
run;
log窗口的輸出結果為: a 123456 2
例3:移除Tab
data _null_;
x='1 0 0 8 6';
y=compress(x,,'s');
put y;
run;
log窗口的輸出結果為: 10086
特殊用法:
compress(source,'k'); 刪除字符k
compress(source,'d'); 刪除字符d
compress(source,,'d'); 刪除數字
compress(source,'kd'); 刪除字符kd
compress(source,,'kd'); 只保留數字
compress(source,'KD'); 輸出原始字符串
附:常用的修飾符及其意義
a/A 所有拉丁字母,包括 a-z A-Z
l/L 所有小寫拉丁字母
u/U 所有大寫拉丁字母
k/K 保留字符
d/D 所有數字
f/F 下划線和所有拉丁字母
n/N 下划線,數字和所有拉丁字母
i/G 忽略要刪除或保留字符的大小寫
s/S 定位符,如空格、tab等
t/T 去掉第一和第二個arguments里的尾部空格