连接多个数据集

17 Mar 2025 | 5 分钟阅读

在上一主题中,我们学习了如何以不同的文件格式编写 SAS 数据集。现在,在本主题中,我们将学习如何使用 SAS 编程语言将多个数据集连接成一个数据集。

假设您在不同的数据集中有许多观测值,并且您需要将所有观测值收集到一个数据集中,那么您将怎么做。为此,SAS 方便您将不同的数据集连接成一个数据集。

SET 语句用于将不同的数据集连接成一个数据集。连接后的数据集存储了原始数据集的所有观测值的总和。连接后的数据集中的所有观测值都遵循一个适当的存储顺序,例如,首先是第一个数据集的所有观测值,然后是第二个数据集的所有观测值,依此类推。

理想情况下,所有组合数据集应具有相同数量的变量,但如果它们具有不同数量的变量,则所有变量都将出现在结果中,对于小数据集,将缺少值。

语法

其中,

Set: 这是一条用于将不同的数据集连接成一个数据集的语句。

数据集 1 数据集 2: 这些是要连接的数据集的名称。

现在,让我们通过一个例子来理解一下,我们如何才能连接数据集

假设,您有一个组织员工的数据,这些数据在两个单独的数据集中可用,一个用于培训部门,另一个用于非培训部门。为了获得所有员工的完整详细信息,我们需要连接这两个数据集。为此,我们使用 SET 语句。

现在,在 SAS studio 中执行上述代码

Concatenate Multiple Data sets

输出

Concatenate Multiple Data sets

从输出中可以看到,两个数据集已连接到一个表中。

不同情况

在某些情况下,数据集的变量存在差异。在这种不同类型的情况下,连接后的数据集中观测值的总数始终等于每个数据集中观测值的总和。让我们看看数据集变量存在差异的不同情况。

1. 当变量的数量不同时

如果所有数据集不具有相等数量的变量,那么数据集仍然会连接,但是多余变量的值会从小数据集中消失。让我们通过一个例子来理解一下。

例如

要连接两个数据集。一个是 training_department,它有五个变量,即 empidnamesalaryaddresscourse,另一个是 non_training_department,它有三个变量,即 empidnamesalary。在输出中,addresscourse 的值将从数据集 non_training_department 中消失。

现在,在 SAS studio 中执行上述代码

Concatenate Multiple Data sets

输出

Concatenate Multiple Data sets

如您在输出中看到的,addresscourse 的值从数据集 non_training_department 中缺失。

2. 当变量名称不同时

当所有数据集包含相同数量的变量,但名称不同时,在这种情况下,我们可以通过应用 Rename 语句来连接数据集。如果我们不使用 Rename 语句,那么 SAS 仍然会连接数据集,但它会为不同名称的变量生成缺失结果。我们可以将 Rename 语句应用于我们创建用于连接的数据集。让我们通过一个例子来理解一下。

例如

在下面的示例中,我们有两个数据集,一个为 Training_Dept,另一个为 Non_Training_Dept。两个数据集都有一个变量,它引用相同的值,即名称,但它在两个数据集中通过不同的名称声明。在数据集 Training_Dept 中,变量通过名称声明,而在数据集 Non_Training_Dept 中,变量通过 ename 声明。为了连接它们,我们在连接后的数据集 All_Dept 上应用 RENAME 语句

现在,在 SAS studio 中执行上述代码

Concatenate Multiple Data sets

输出

Concatenate Multiple Data sets

正如我们在输出中看到的,员工姓名通过变量 Employee 连接起来。

3. 当变量的长度不同时

如果数据集中变量的长度不同,那么我们可以通过应用 Length 语句来连接它们。在连接后的数据集中应用 Length 语句时,我们应该考虑使用更长的长度,而不是更短的长度,因为 SAS 将生成更长的容器,可以轻松接受较短的长度值。

例如

在下面的示例中,变量 nameTraining_Dept 数据集中长度为 5,在 Non_Training_Dept 数据集中长度为 7。连接时,我们应用更长的长度,即 8。

在 SAS studio 中执行上述代码

Concatenate Multiple Data sets

输出

Concatenate Multiple Data sets

正如我们在输出中看到的,变量名是通过更长的字符长度连接起来的,即 8


下一主题数据集的子集