数据的清洗和加工
一般包括数据合并、比较、缺失值的查询和填补、查找重复值和异常值、生成数据子集、产生新变量等,以适应不同的研究目的。
数据合并
1. 利用set
语句进行纵向合并
- 用法格式:
data 数据集;
set 数据集1(数据集选项)数据集2(数据集选项)...;
run;
如果set后面只有一个数据集,相当于复制。针对数据集的一些选项,作者介绍了2个非常实用的选项:
set 数据集1(in=临时变量1) 数据集2(临时变量2) ...;
set 数据集1(rename=(原名1=新名1 ...)) 数据集2(rename=(原名1=新名1 ...))...;
数据集1(in=临时变量1)
的意思是针对数据集1产生一个临时变量1(变量名自己定),当合并的记录属于数据集1时,该临时变量值为1,否则为0.但要注意这种方式产生的临时变量可以调用,但不会在结果中显示,若想显示需要将临时变量赋值给新变量。
另外,若不同数据集的相同变量格式不同,需要先用input...;format...;
统一一下变量的格式再进行合并,例如:
data work.A1; ##在work中创建空白数据集A1,注意新建数据集一开始是空白的;
set work.A1; ##复制原始的数据集A1到新A1中;
height1=input(height,8.); ##将height变量(原本是字符型)转变为长度为8的数值型并赋值给height1;
format height1 8.; ##将height1作为长度为8的数值型变量输出;
drop height; ##删除变量height
rename height1=height; ##将height1重命名为height
run;
数据集变量格式查询命令为:
proc contents data=work.A1;
run;
2. 利用merge
语句进行横向合并
- 用法格式:
data 数据集;
merge 数据集1 数据集2 ...;
by 变量1 变量2 ...;
run;
其中,merge
的作用是将若干个数据集依次向右连接,并存当道一个新数据集中。by
相当于指定索引,若不指定则按行号直接合并。
注意:在利用by
语句横向合并时,如果两个数据集事先没有按id排序,一定要先分别对他们都排序才能合并(proc sort
语句)。合并时默认显示所有的记录,也就是两个数据集的并集,缺少的记录作为缺失值。
若想产生交集则需要借助in=
选项,例如(数据的具体内容请自行查看《小白学SAS》page 95 ):
data ab;
merge ab1(in=d1) ab2(in=d2); #产生标识两个数据集的临时变量d1和d2;
by id; #以id为索引进行合并
if d1=1 and d2=1; #保留d1和d2都为1 的记录
proc print;
run;
当if
跟在set
或merge
语句后面时,它所起的作用就是根据指定的表达式保留符合条件的观测。