SAS - 合并数据集

17 Mar 2025 | 6 分钟阅读

连接 | 组合

在上一篇中,我们学习了 SAS 中多个变量的排序,并了解了可以同时根据多个变量对数据值进行排序。现在,我们将学习如何在 SAS 编程语言中合并数据集。您将找到许多示例,以获得更好的理解。

那么,让我们开始吧.......

什么是 SAS 合并?

SAS 中的合并是一个过程,它将来自两个或更多 SAS 数据集的观测值组合在一起。合并的基础是,合并数据集必须有一个共同的变量,并且其中包含共同的数据值(或观测值)。

请按照以下步骤合并数据集

  • 创建一个新的数据集以进行合并。
  • 我们使用 By 语句来表示用于匹配合并先决条件的公共变量的名称。
  • 在数据集名称之前使用 MERGE 语句。
  • 合并的数据集必须至少有一个公共变量。

例如

SAS Merge Dataset

如您所见,ID 是两个数据集之间的公共变量。

使用以下语法合并第一个和第二个数据集

输出

ID    A   B   C
101    1   2    6
102    3   4   5
103    5   6   7
104    3    7   9

在上面的例子中,两个数据集都已合并。两个数据集包含不同的数据,并且变量 ID 包含相同的数据,因为它是一个唯一的标识符(没有重复项)。

让我们通过一个例子来理解

当我们使用 merge 语句合并两个数据集时,并且我们已经知道公共变量的每个观测值在另一个数据集中都有匹配项,那么我们可以非常直接地进行合并。 这是一个例子。

通常,在相同的情况下,不同的数据存储在两个或多个单独的数据集中。 例如,我们要存储员工的数据,为此我们创建了两个数据集,一个 essential(基本),另一个 additional(附加)。 essential 数据集包含员工的基本信息,例如员工 ID、姓名、手机、电子邮件、adhar 等,而 additional 数据集包含很少使用的信息。

数据 essential

数据集 additional

现在,创建新数据集 "combined" 以合并 essential 和 additional 数据集。

现在,在 SAS Studio 中执行此代码。

SAS Merge Dataset

输出

SAS Merge Dataset

当匹配不完美时

如果变量是公共的,但其数据值在数据集之间不公共,会发生什么情况?

例如

SAS Merge Dataset

在数据集母项中,第二个观测值(ID=201)与数据集子项的第二个观测值(ID =401)不匹配。 匹配合并将是这样的

结果

ID   A   B   C
101   1   2     0    both data sets are contributing to this observation
201   3   4     .     only data set first contributed to this observation          
301   5   6     1    both data sets contributed to this observation

让我们通过一个例子来理解

这里我们正在使用上面提到的例子,但是改变它的一些数据值。 取两个数据集; 一个是 essential,另一个是 additional。 现在,我们改变了变量 ID 在 additional 数据集中的两个数据值,让我们看看结果是什么。

Data essential;
input employeeid name$ age mobile email$ adhar$;
datalines;
101 Vikas 25 9374747373 [email protected] 234390876344
102 Nikita 23 9086746353 [email protected] 128743526709
103 Ginni 27 9845637238 [email protected] 980706509823
104 Sonoo 35 9893235487 [email protected] 123214567876
105 Gaurav 26 9893235445 [email protected] 123454326789
106 Ayush 24 9893235432 [email protected] 234565432123
107 Harshita 23 9893232345 [email protected] 908756897645
108 Preeti 27 9993235487 [email protected] 987605432123
109 Mayur 28 9893235432 [email protected] 123213487654
110 Rajesh 29 9893235409 [email protected] 456578987623
;
run;  
data additional;
input employeeid address$ father$ mother$;
datalines;
101 bhopal narendra amrita
111 kolkata mohan anita
103 timarnee ramkumar vaishnavi
123 meeruth arjun megha
105 delhi kailash manorama
106 noida ramakant sunita
107 gorakhpur shreelal shikha
108 seehor shekher sheela
109 indore krishna tulsi
110 dewas susheel janki
;
run;
Data combined;
merge essential additional;
By employeeid;
run;
proc print data=combined;
run;

在 SAS Studio 中执行此代码

SAS Merge Dataset

输出

SAS Merge Dataset

在上面的代码中,您可以看到,变量 ID 在两个数据集 essential 和 additional 中是公共的,但是变量 ID 的两个数据值(在图像中突出显示,一个为绿色,另一个为红色)在数据集 "additional" 中更改了。

当我们在 SAS Studio 中执行此代码时,它将根据数据集 "essential" 中提到的数据值生成输出(考虑输出图像),但是如果您在日志窗口中检查它,您可以看到错误消息。

ERROR: BY variables are not properly sorted on data set WORK.ADDITIONAL.
 employeeid=111 name=  age=. mobile=. email=. adhar=  address=kolkata 
 father=mohan mother=anita FIRST.employeeid=1 LAST.employeeid=1
 _ERROR_=1 _N_=6

IN= 变量

如果您只想将合并输出放入数据集中该怎么办? 意思是只保留那些两个输入数据集都做出贡献的观测值。

换句话说,当您不想打印未做出贡献的观测值时,则使用 IN=Variables。

SAS 已经为您安装了特殊的临时变量,称为 "IN = 变量",以便您能够做更多的事情。

现在,您需要做什么

1. 对于两个合并数据集,使用带有 merge 语句的额外变量

语法

2. 在数据步骤中,适当地使用 "IN= 变量"。

让我们通过一个例子来理解

SAS Merge Dataset
SAS Merge Dataset

我们可以在输出中看到;数据集 other 仅保留匹配 ID 的数据值。

  • 如果我们只想保留贡献观测值,那么给变量 a 和 b 赋值 1。
  • 如果我们只想保留未贡献的观测值,那么给变量 a 和 b 赋值 0。

在上面的例子中,"IN= 变量" A 和 B 像这样取值

SAS Merge Dataset

如果您不仅想保留匹配的数据值,还想跟踪非匹配数据值的不同数据集,那么您可以这样创建三个数据集

总结

所以,这就是关于合并数据集的全部内容。 在本节中,我们学习了什么是 SAS 合并数据集,如何合并两个或多个数据集,以及数据集没有匹配时会发生什么。

希望您清楚地理解了本主题。 但是,如果您仍然有任何问题,请在我们的联系方式部分提问。