- SAS 教程
- SAS - 首页
- SAS - 概述
- SAS - 环境
- SAS - 用户界面
- SAS - 程序结构
- SAS - 基本语法
- SAS - 数据集
- SAS - 变量
- SAS - 字符串
- SAS - 数组
- SAS - 数值格式
- SAS - 运算符
- SAS - 循环
- SAS - 决策
- SAS - 函数
- SAS - 输入方法
- SAS - 宏
- SAS - 日期和时间
- SAS 数据集操作
- SAS - 读取原始数据
- SAS - 写入数据集
- SAS - 合并数据集
- SAS - 合并数据集
- SAS - 数据集子集
- SAS - 数据集排序
- SAS - 数据集格式化
- SAS - SQL
- SAS - 输出交付系统
- SAS - 模拟
- SAS 基本统计过程
- SAS - 算术平均值
- SAS - 标准差
- SAS - 频数分布
- SAS - 交叉表
- SAS - t 检验
- SAS - 相关分析
- SAS - 线性回归
- SAS - Bland-Altman 分析
- SAS - 卡方检验
- SAS - Fisher 精确检验
- SAS - 重复测量分析
- SAS - 单因素方差分析
- SAS - 假设检验
- SAS 有用资源
- SAS - 快速指南
- SAS - 有用资源
- SAS - 问答
- SAS - 讨论
SAS - 合并数据集
多个 SAS 数据集可以基于特定的公共变量合并以生成单个数据集。这是使用 **MERGE** 语句和 **BY** 语句完成的。合并数据集中的观测总数通常小于原始数据集中观测总数的总和。这是因为当公共变量的值匹配时,来自两个数据集的变量被合并为一个记录。
下面给出合并数据集的两个前提条件:
- 输入数据集必须至少有一个公共变量才能合并。
- 输入数据集必须按将用于合并的公共变量排序。
语法
SAS 中 MERGE 和 BY 语句的基本语法如下:
MERGE Data-Set 1 Data-Set 2 BY Common Variable
以下是所用参数的说明:
**数据集1,数据集2** 是一个接一个写出的数据集名称。
**公共变量** 是根据其匹配值将数据集合并的变量。
数据合并
让我们通过一个例子来理解数据合并。
示例
考虑两个 SAS 数据集,一个包含员工 ID、姓名和工资,另一个包含员工 ID 和部门。在这种情况下,为了获取每个员工的完整信息,我们可以合并这两个数据集。最终的数据集每个员工仍然只有一条观测值,但它将包含工资和部门变量。
# Data set 1 ID NAME SALARY 1 Rick 623.3 2 Dan 515.2 3 Mike 611.5 4 Ryan 729.1 5 Gary 843.25 6 Tusar 578.6 7 Pranab 632.8 8 Rasmi 722.5 # Data set 2 ID DEPT 1 IT 2 OPS 3 IT 4 HR 5 FIN 6 IT 7 OPS 8 FIN # Merged data set ID NAME SALARY DEPT 1 Rick 623.3 IT 2 Dan 515.2 OPS 3 Mike 611.5 IT 4 Ryan 729.1 HR 5 Gary 843.25 FIN 6 Tusar 578.6 IT 7 Pranab 632.8 OPS 8 Rasmi 722.5 FIN
上述结果是通过使用以下代码实现的,其中公共变量 (ID) 用于 BY 语句中。请注意,两个数据集中的观测值都已按 ID 列排序。
DATA SALARY; INPUT empid name $ salary ; DATALINES; 1 Rick 623.3 2 Dan 515.2 3 Mike 611.5 4 Ryan 729.1 5 Gary 843.25 6 Tusar 578.6 7 Pranab 632.8 8 Rasmi 722.5 ; RUN; DATA DEPT; INPUT empid dEPT $ ; DATALINES; 1 IT 2 OPS 3 IT 4 HR 5 FIN 6 IT 7 OPS 8 FIN ; RUN; DATA All_details; MERGE SALARY DEPT; BY (empid); RUN; PROC PRINT DATA = All_details; RUN;
匹配列中的缺失值
在某些情况下,公共变量的一些值在数据集之间可能不匹配。在这种情况下,数据集仍然会合并,但在结果中会给出缺失值。
示例
考虑工资数据集缺失员工 ID 3,部门数据集缺失员工 ID 6 的情况。应用上述代码后,我们得到以下结果。ID NAME SALARY DEPT 1 Rick 623.3 IT 2 Dan 515.2 OPS 3 . . IT 4 Ryan 729.1 HR 5 Gary 843.25 FIN 6 Tusar 578.6 . 7 Pranab 632.8 OPS 8 Rasmi 722.5 FIN
仅合并匹配项
为了避免结果中的缺失值,我们可以考虑只保留公共变量值匹配的观测值。这是通过使用 **IN** 语句实现的。需要更改 SAS 程序的 merge 语句。
示例
在下面的示例中,**IN=** 值仅保留来自两个数据集 **SALARY** 和 **DEPT** 的值匹配的观测值。
DATA All_details; MERGE SALARY(IN = a) DEPT(IN = b); BY (empid); IF a = 1 and b = 1; RUN; PROC PRINT DATA = All_details; RUN;
执行上述包含更改部分的 SAS 程序后,我们将获得以下输出。
1 Rick 623.3 IT 2 Dan 515.2 OPS 4 Ryan 729.1 HR 5 Gary 843.25 FIN 7 Pranab 632.8 OPS 8 Rasmi 722.5 FIN
广告