SAS - 合并数据集
可以基于特定的公共变量合并多个 SAS 数据集以提供单个数据集。 这是使用 MERGE 语句和 BY 语句完成的。合并数据集中的观测总数通常小于原始数据集中观测数的总和。这是因为当公共变量的值匹配时,来自两个数据集的变量会合并为一个记录。
下面给出了合并数据集的两个先决条件 −
- 输入数据集必须至少有一个要合并的公共变量。
- 输入数据集必须按将用于合并的公共变量进行排序。
语法
SAS 中 MERGE 和 BY 语句的基本语法是 −
MERGE Data-Set 1 Data-Set 2 BY Common Variable
以下是使用的参数说明 −
Data-set1,Data-set2 是一个接一个写的数据集名称。
Common Variable 是基于其匹配值数据集将被合并的变量。
数据合并
让我们借助一个示例来了解数据合并。
示例
考虑两个 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 和缺少表单数据集 DEPT 的员工 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 程序的合并语句。
示例
在下面的示例中,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