本文將介紹SAS中處理字符串時最常用的5個函數(shù):SUBSTR、TRANWRD、TRANSLATE、COMPRESS、CAT。
1. SUBSTR函數(shù):用以提取或替換特定位置的字符
(1). (right of =) Function,提取字符:Substr(s,p,n)從字符串s中的第p個字符開始提取n個字符的子串。
example:
/*從x中提取第3-4個字符*/
data?_null_;
x="1234ABCD";
y=substr(x,3,2);
puty=;
run;
輸出: y=34
(2). (left of =) Function,字符替換:Substr(s,p,n)=characters-to-replace,從變量s的p個字符開始替換n個字符
example:
/*從x中將第1-2個字符替換為EF*/
data?_null_;
x="1234ABCD";
substr(x,1,2)="EF";
put?x=;
run;
輸出:x=EF34ABCD
注意:
1. 必須是從字符變量中提取,對數(shù)值變量不起作用,必須轉(zhuǎn)換為字符變量,如果是數(shù)字變量,在調(diào)用substr函數(shù)時會自動把數(shù)字變量轉(zhuǎn)為字符變量,不過需要注意的是轉(zhuǎn)化為的字符變量采用的是best12.格式。
2. n的長度不能超過p后面的長度,例如s=scorecard,b=Substr(s,5,5)系統(tǒng)會有提示。
3. 如果缺失n的話,SAS則會提取p后面全部字符,如果是替換的話,則不能缺失n。
4. 對于漢字的截取若使用substr函數(shù)將輸出亂碼,使用ksubstr函數(shù)即可,另外,ksubstrb函數(shù)可針對字節(jié)進(jìn)行截取。
2. TRANWRD函數(shù):用以替換特定字符
example:
/*從x中將字符"AB"替換為"ef"*/
data?_null_;
x="ABabCDEFGABCD";
m="2023 02 14";
y=tranwrd(x,"AB","ef");
n=tranwrd(m," ","-");
put?y= n=;
run;
輸出: y=efabCDEFGefCD? ? n=2023-02-014
注意:
TRANWRD函數(shù)的字符串替換區(qū)分大小寫。
3. TRANSLATE函數(shù):用以替換字符排列順序
TRANSLATE( to, s,?from):?將字符串s從from的排序轉(zhuǎn)換成to的排序
example:
/*將x中的字符串逆序輸出*/
data?_null_;
x="ABCDE";
y=translate("54321",x,"12345");
put?y=;
run;
輸出: y=EDCBA
4. COMPRESS函數(shù):用以體剔除或保留特定字符
COMPRESS?(<source>,<chars>,<modifiers>)
source 指定一個要被移除字符的源字符串。chars 指定一欄初始字符,默認(rèn)它是要從source里移除的。modifiers? 指定一個修飾符,函數(shù)的具體功能。如:
a 增加(A - Z, a - z)到初始字符里(chars)。
d 增加數(shù)字到初始字符里(chars)。
f 增加下劃線和字母 (A - Z, a - z) 到初始字符里(chars)。
g 增加圖形字符到初始字符里(chars)。
k 不移除初始字符(chars)而是返回這些字符。
l? 增加小寫字母(a - z)。
n 增加數(shù)字、下劃線和字母(A - Z, a - z)。
p 增加標(biāo)點(diǎn)符號。
s 增加空格,包括空格,水平制表符,垂直制表符,回車符,換行符和換頁符。
t 剪掉尾部空格。
u 增加大寫字母(A - Z)。
w 增加可印刷的字符。
X 增加十六進(jìn)制字符
example:
/*從x中將字符"A"及小寫字母剔除*/
data?_null_;
x="ABabCD10GABCD";
y=compress(x,"A","l");
z=compress(x,,'kd');/*僅保留變量中的數(shù)字*/
put?y= z=;
run;
輸出:y=BCD10GBCD? z=10
注意:
1. 只有source,移除空格。
2. 只有source,chars時,從source中移除chars。
3.?source ,chars,modifiers都有時,modifiers??K決定保留還是移除。無K時,移除chars加上modifiers指定的。
5. CAT函數(shù):用以拼接字符串
CAT(A,B): 拼接字符串A和B,并保留首尾全部空格(同A||B)
CATS(A,B):?拼接字符串A和B,并去掉首尾全部空格(同strip(A)||strip(B))
CATX("x",A,B):?拼接字符串A和B,并去掉首尾全部空格,并且在字符串之間加上一個指定的字符串"x"(同strip(A)||"x"||strip(B))
CATT(A,B):?拼接字符串A和B并去掉各字符串尾部空格(同trim(A)||trim(B))
example:
data?_null_;
a='i';
b=' love ';
c=' you ';
s1=cat(a,b,c);
s2=cats(a,b,c);
s3=catx('_',a,b,c);
s4=catt('/',a,b,c);
put?s1=/s2=/s3=/s4=;
run;
輸出:
s1=i ?love? you
s2=iloveyou
s3=i_love_you?
s4=/i love you