您好,欢迎来到九壹网。
搜索
您的当前位置:首页SAS系统和数据分析拼接和合并数据集

SAS系统和数据分析拼接和合并数据集

来源:九壹网
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.

第十二课 拼接和合并数据集

数据集的连接是把两个或两个以上的数据集的观测连接成一个新的数据集。连接的方式有两种:拼接和合并。在SAS数据步中用SET语句可以拼接数据集,而用MERGE语句可以合并数据集。例如,我们有两个数据集A和B,要拼接和合并成新的数据集C,两种不同方法的程序和结果见示意图12.1 所示。

图12.1 数据集的两种连接方式:拼接和合并

一、 数据集的拼接

数据集的拼接可分成三种主要的拼接情况:

1. 相同变量的数据集拼接

这是最简单的情况,在这种情况下,新生成的数据集就含有这些相同的变量,观测的数目是所有这些数据集的观测总和。例如,数据集A和B都含有两个相同的变量COMMOM和X,且都有三条观测,如图12.2 所示。

文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.

图12.2 含有相同的变量COMMOM和X的两个数据集

用下面程序生成新数据集C有两个相同的变量COMMOM和X,6条观测。

Data A ;

Input common x ; Cards ;

9801 1 9802 2 9803 3 Data B ;

Input common x ; Cards ;

9801 4 9802 5 9803 6 Data C ;

Set A B ; Proc print data=C ; Run;

拼接生成的新数据集C的结果如图12.3所示。

图12.3 相同变量的数据集拼接结果

2. 不相同变量的数据集拼接

如果两个数据集A和B含有的变量不完全相同,如上例中数据集B含有的不是COMMON

文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.

和X变量而是COMMON和Y变量,如图12.4所示。用SET语句拼接A和B数据集后,新生成的数据集C就含有三个变量COMMON、X和Y,观测的数目仍然是所有这些数据集的观测总和,但原数据集中没有的变量在拼接后新数据集中为缺失值。

图12.4 含有不相同的变量X和Y的两个数据集

生成新数据集C的程序如下:

Data C ;

Set A B ; Proc print data=C ; Run ;

拼接生成的新数据集C的结果如图12.5所示。

图12.5 不相同变量的数据集拼接结果

3. 按关键字排序后拼接数据集

如果要求新生成的数据集C按共同的关键字例如COMMON排序观测,那么预先要数据集A和B也已按COMMON关键字排序好,可通过排序过程PROC SORT 和BY指明关键字。生成新数据集C的程序如下:

Proc sort data= A ;

By Common ; Proc sort data= B ;

By Common ; Data C ;

Set A B ; By Common ;

文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.

Proc print data=C ; Run ;

拼接生成的新数据集C的结果如图12.6所示。

图12.6 按关键字排序后拼接的数据集结果

无论哪一种拼接形式,用SET语句拼接生成的新数据集的观测总数为原各输入数据集观测数之和。

二、 数据集的合并

数据集的合并是通过使用MERGE语句把两个或两个以上数据集中的两条观测或两条以上的观测合并为新生数据集中的一条观测。

数据集的合并可分成两种主要的合并情况:  一对一合并(不带BY语句)  匹配合并(带有BY语句)

1. 一对一合并(不带BY语句)

把一个数据集中的第一条观测同另外一个数据集中第一条观测合并,第二条观测同另外一个数据集中第二条观测合并,以此类推。新生成的数据集中的观测总数为这些数据集中观测个数的最大值。如果相对应的某个数据集已没有观测,则相应的变量值为缺省值。如果在几个数据集中有共同的变量,则在合并后新生成的数据集中只有一个变量,其值为列在MERGE语句中最后一个含有该变量的数据集中的观测值。例如,我们有两个数据集A和B,如图12.7所示。

图12.7 含有不相同的变量和相同变量不同值的两个数据集 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.

生成新数据集C的程序如下:

Data C ;

Merge A B ; Proc print data=C ; Run ;

合并的新数据集C的结果如图12.8所示。

图12.8 一对一合并(不带BY语句)后的结果

2. 匹配合并(带有BY语句)

如果想把两个或两个以上的数据集按照相同的关键字值合并,则在MERGE语句后面要用BY跟关键字语句。且每一个数据集必须预先按关键字排序好。如果两个数据集中观测的关键字值不匹配,输出所有这些观测,相应的新增变量的值为缺省值。如果两个数据集中观测的关键字值是多对多匹配,要注意新生成的数据集中相同关键字值的观测数为各数据集中这个关键字值的观测数的最大值,相同关键字值的观测按顺序一对一合并,无论哪一个数据集中这个相同关键字值的观测没有了,都取这个相同关键字值的最后一条观测继续合并。例如,我们有一个订单数据集ORDERS和一个产品数据集PRODUCTS,如图12.9所示。

图12.9 订单数据集ORDERS和产品数据集PRODUCTS

要合并生成一个新的订单销售数据集SALES的程序如下:

Proc sort data= ORDERS ;

By P_ID ;

文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.

Proc sort data= PRODUCTS ;

By P_ID ; Data SALES ;

Merge ORDERS PRODUCTS ; By P_ID ; Proc print data=SALES ; Run ;

合并的新数据集SALES结果如图12.10所示。

图12.10 匹配合并(带有BY语句)后的结果

第十三课 PROC TRANSPOSE转置数据

一、 转置数据集的概念

在对数据库的操作中,有时需要把数据库的行和列进行交换,也可称转置。SAS系统中TRANSPOSE过程能完成对SAS数据集的转置,即把观测(行)变为变量(列),变量变为观测。该过程从读入的一个数据集中创建一个新的数据集。新数据集中包含三类变量:

 一是由输入数据集中的观测转置后创建的新变量,又称转置变量,如_NAME_、

COL1、COL2、COL3……

 二是从输入数据集中拷贝过来的变量,使用COPY语句定义这个变量,新数据集

中COPY过来的变量与输入数据集中的变量具有相同的名字和值

 三是为了识别新数据集中每条观测的来源用ID语句定义的变量值作为新数据集创

建的新变量

文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.

二、 使用PROC TRANSPOSE过程转置数据集

1. 用于TRANSPOSE过程的常用语句

Proc Transpose <选项列表> ;

Var 变量列表 ; Id 变量 ; Copy 变量列表 ; Run ;

2. 转置CLASS数据集

例如,在CLASS数据集中有变量NAME、TEST1、TEST2和TEST3,是按每个学生各课程成绩作为一条观测来组织的,现在我们要创建一个按每门课程各个学生的考试成绩作为一条观测的新数据集NEWCLASS。程序如下:

Proc Transpose Data=CLASS Out=NEWCLASS ; Var TEST1 TEST2 TEST3 ; Run ;

转置生成的新数据集NEWCLASS的结果如图13.11所示。

图13.11 由CLASS转置生成的新数据集NEWCLASS

3. 设定新数据集中的转置变量名

新数据集中的转置变量名是可以由用户自己设定的。

 通过PROC TRANSPOSE语句的选项NAME=COURSE,修改了省缺的新变量名

_NAME_为COURSE

 还可以通过选项PREFIX=NO,修改了省缺的新变量名COL1、COL2、COL3、

文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.

COL4、COL5为NO1、NO2、NO3、NO4、NO5

 如果新变量名COL1、COL2、COL3、COL4、COL5想用输入数据集CLASS中

NAME变量中的对应值来替代,使用ID命令定义NAME即可。这样命名新变量的优点是通过新变量名就可以很容易地识别原数据集中的观察行 修改程序如下:

Proc Transpose Data=CLASS Out=NEWCLASS Name=COURSE ; Var TEST1 TEST2 TEST3 ; Id Name ; Run ;

转置生成的新数据集NEWCLASS的结果如图13.12所示。

图13.12 使用ID语句转置生成的新数据集NEWCLASS

另外,还可以在PROC TRANSPOSE过程中使用COPY语句,在语句中指定输入数据集的某一个(或某几个)变量,将直接把输入数据集中指定变量那一列拷贝到新数据集也成为一列。当然,这样操作常会产生输出数据集的行和列数不匹配,用缺失值填满。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务