SAS数据的合并

2020-04-20  本文已影响0人  3between7

数据的清洗和加工

一般包括数据合并、比较、缺失值的查询和填补、查找重复值和异常值、生成数据子集、产生新变量等,以适应不同的研究目的。

数据合并

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跟在setmerge语句后面时,它所起的作用就是根据指定的表达式保留符合条件的观测。

上一篇 下一篇

猜你喜欢

热点阅读