可以根据特定的公共变量合并多个SAS数据集,以提供单个数据集.这是使用 MERGE 语句和 BY 语句完成的.合并数据集中的观察总数通常小于原始数据集中观察数的总和.这是因为当公共变量的值匹配时,两个数据集的变量合并为一个记录.
合并下面和下面给出的数据集有两个先决条件;
输入数据集必须至少有一个要合并的公共变量.
输入数据集必须按将用于合并的公共变量排序.
SAS中MERGE和BY语句的基本语法是 :
MERGE Data-Set 1 Data-Set 2 BY Common Variable
以下是所用参数的描述 :
Data-set1,Data-set2 是一个接一个写的数据集名称.
普通变量是基于其合并数据集的匹配值的变量.
让我们通过一个例子来理解数据合并.
考虑两个SAS数据集,其中一个包含带有名称的员工ID和薪水和另一个包含员工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
上述结果是通过使用以下代码实现的,其中公共变量(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缺少表单数据集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程序的合并声明.
在下面的示例中, IN = value仅保留来自数据集 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