一、计算变量的长度
基本格式:
- length(变量):对缺失值返回1。
- lengthn(变量):对缺失值返回0。
注意:
- 长度不包括尾部空。
- 数值型长度默认为12。
data iden;
input iden $;
length_1=length(iden);
length_2=lengthn(iden);
cards;
abcd
abcd123
abcd_123
.
;
proc print;
run;
二、提取变量中的字符
指定一个变量,对该变量从起始位置开始,提取指定长度的字符:
基本格式:
substrn(变量,起始位置<,提取长度>)
- 起始位置:从第几个字符开始提取。
- 提取长度:取多少个字符,默认提取到最后一位。
data iden;
input iden:$18.;
if length(iden)=18 then gen=substrn(iden,17,1);
else gen=substrn(iden,15,1);
if mod(gen,2)=1 then gender="男";
else gender="女";
cards;
36053319720613591x
360533801215792
360533198208254533
360522851009886
;
proc print;
run;
三、查找变量中的字符
根据指定的起始位置,找到相应的内容。
- 如果找到,返回:找到的位置
- 如果找不到,返回:0
基本格式:
匹配字符串:
find(变量,查找内容<,"i"> <,起始位置>)
匹配字符串中的任意一个字符:
findc(变量,查找内容<,"i"> <,起始位置>)
- 查找内容:要查找的字符或字符串
- i:忽略大小写。默认:不忽略。
- 起始位置:从第几个字符开始查找。默认:从第一个开始。
data book;
input book:& $100.;
sas=find(book,"sas","i");
if sas>0 then class="SAS书";
else class="其他书";
cards;
Survival Analysis Using SAS
Matlab程序设计
SPSS数据分析
SAS应用分析
The Little SAS Book
;
proc print;
run;
其他相关函数:
anyalpha(变量<,起始位置>) | 返回第一个字母的位置。 |
anydigit(变量<,起始位置>) | 返回第一个数字的位置。 |
anyalnum(变量<,起始位置>) | 返回第一个字母或数字的位置。 |
anyspace(变量<,起始位置>) | 返回第一个空格的位置。 |
data computer;
input type $ @@;
alpha=anyalpha(type);
digit=anydigit(type);
xh=substrn(type,alpha,digit-alpha);
bh=substrn(type,digit,length(type)-digit+1);
/*
根据后面说到的compress函数,这两个变量值还可以这样获取
xh=compress(type,,"d");
bh=compress(type,,"a");
*/
cards;
TP340 KS320 B3510 C560 H430
;
proc print;
run;
四、替换变量中的字符
从变量中找到“查找值”,并用“替换值”替换掉:
tranwrd(变量,查找值,替换值)
查找值和替换值:可以是字符也可以是字符串
data lx;
input id lx$;
lx1=tranwrd(lx,"显效","有效");
lx1=tranwrd(lx1,"痊愈","有效");
cards;
1 显效
2 有效
3 无效
4 痊愈
;
proc print;
run;
五、去除变量中的字符
从变量中去掉“欲去除的字符”默认为空格?
compress(变量<,欲去除的字符><,"修饰符">)
<>中的内容可以省略,但是中间的逗号不可以省略。
修饰符
a | 去掉变量中的所有字母 |
d | 去掉变量中的所有数字 |
s | 去掉变量中的所有空格 |
i | 忽略大小写 |
k | 保留“欲去除的字符”,去掉其他字符 |
kd | 保留变量中所有的数字 |
ka | 保留变量中所有的字母 |
data phone;
input phone:&$20.;
phone1=compress(phone,"(-) ");/*去掉变量中的"("、"-"、")"、" "*/
phone2=compress(phone,,"kd");
cards;
(010)67658925
010-67665632
010 67685621
;
proc print;
run;
六、去除字符型变量中的空格
trim() | 去除尾部空格 |
left() | 将字符串首部空格移到尾部 |
strip() | 去除首尾两部的字符 |
七、变量的合并
将几个变量合并为一个变量
cats(变量1,变量2,……) | 删掉前后的空格 |
catx("分隔符",变量1,变量2,……) | 删掉前后的空格,中间用分隔符隔开,默认:分隔符=空格 |
cat(变量1,变量2,……) | 保留首尾全部空格 |
SAS中也可以用"||"连接变量,用空格连接。
data code;
input prov$ city$ county$;
code1=cats(prov,city,county);
code2=catx("-",prov,city,county);
code3=prov||city||county;
cards;
37 05 02
37 03 21
37 06 13
37 06 82
;
proc print;
run;
八、清点变量中某个字符的个数
从变量中找到“欲清点字符”
- 找到了,返回:字符个数
- 没找到,返回:0。
count(变量,欲清点的字符<,"i">)
i:忽略大小写,默认不忽略。
data ques;
input id (y1-y10) ($); /*输入变量y1-y10,均为字符型*/
y=cats(of y1-y10); /*将y1-y10合并为一个变量*/
cy=count(y,"y","i");
cn=count(y,"n","i");
cards;
1 y y n Y n y n Y n n
2 y n y Y n y y Y n y
3 n y N y y y n Y y n
4 n n Y y y y N Y n y
;
proc print;
run;
九、查找变量中的缺失值
判断变量是否为缺失值
missing(变量)
是则返回:1
不是则返回:0
data baseline;
input id gender$ age;
mgender=missing(gender);
mage=missing(age);
cards;
1 f 60
2 m 59
3 f .
4 . 48
;
proc print;
run;