×

SAS 教程

SAS 概述SAS 程序结构SAS 基本语法SAS 数据集SAS 变量SAS 字符串SAS 数组SAS 数字格式SAS 运算符SAS 循环SAS 决策SAS 功能SAS Input 输入方法SAS 宏SAS Date Times 日期时间

SAS 数据集操作

SAS 写入数据集SAS 连接数据集SAS 合并数据集SAS 子集数据集SAS 数据集排序SAS 格式数据集SAS SQLSAS ODSSAS 模拟SAS 读取原始数据

SAS 数据展示

SAS 直方图SAS 条形图SAS 饼图SAS 散点图SAS 箱线图

SAS 基本统计程序

SAS 线性回归SAS Bland Altman分析SAS 卡方SAS Fisher精确测试SAS 算术平均值SAS 重复测量分析SAS 标准偏差SAS 单因素方差分析SAS 频率分布SAS 假设检验SAS 交叉表格SAS T检验SAS 相关性分析

SAS 相关资源

SAS 讨论SAS 有用的资源SAS 相关问题与解答

SAS 合并数据集


可以基于特定的公共变量合并多个SAS数据集以给出单个数据集。 这是使用MERGE语句和BY语句完成的。 合并数据集中的观察的总数通常小于原始数据集中的观察的数量的总和。 这是因为当公共变量的值存在匹配时,变量形成两个数据集合被合并为一个记录。

下面给出了合并数据集的两个先决条件:

  • 输入数据集必须至少有一个要合并的公用变量。
  • 输入数据集必须按照将用于合并的公共变量排序。

语法

SAS中的MERGE和BY语句的基本语法是:

MERGE Data-Set 1 Data-Set 2
BY Common Variable

以下是所使用的参数的说明:

  • Data-set1Data-set2是一个接一个写入的数据集名称。
  • 公共变量是基于其匹配值的数据集合将被合并的变量。

数据合并的例子

考虑两个SAS数据集,一个包含具有名称和工资的雇员ID,另一个包含具有雇员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 

上述结果通过使用以下代码实现,其中在BY语句中使用公共变量(ID)。 请注意,两个数据集中的观测值已在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缺少表单数据集DEPT。 当应用上述代码时,得到以下结果。

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 

分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)