本文概述
- 加盟|结合
- 什么是SAS合并?
- 当匹配不完美时
- IN =变量
- 摘要
因此, 让我们开始吧……
什么是SAS合并? SAS中的合并是一个合并来自两个或多个SAS数据集的观察值的过程。合并的基础是, 合并数据集必须具有一个内部具有公共数据值(或观测值)的公共变量。
使用以下步骤合并数据集:
- 创建一个新的数据集进行合并。
- 我们使用By语句表示公共变量的名称, 该公共变量用于匹配合并的先决条件。
- 在数据集名称之前使用MERGE语句。
- 合并数据集必须至少具有一个公共变量。
文章图片
正如你在上面看到的, ID是两个数据集中的公共变量。
使用以下语法来合并第一和第二数据集:
DATASET third;
merge first second;
By id;
run;
输出
IDABC
101126
102345
103567
104379
在上面的示例中, 两个数据集已合并。两个数据集包含不同的数据, 并且变量ID包含相同的数据, 因为它是唯一标识符(无重复)。
让我们通过一个例子来理解:
当我们使用merge语句合并两个数据集时, 并且我们已经知道, 对一个公共变量的每次观察在另一个数据集中都有一个匹配项, 那么我们可以非常直接地合并。这是一个例子。
【SAS-合并数据集解析图解】通常, 在相同情况下, 不同的数据存储在两个或多个单独的数据集中。例如, 我们要存储员工的数据, 为此我们创建了两个数据集, 一个是必不可少的, 另一个是附加的。基本数据集包含员工的非常基本的信息, 例如工作ID, 姓名, 手机, 电子邮件, adhar等, 而其他数据集则包含很少使用的信息。
必要数据
data essential;
input employeeid name$ age mobile email adhar$;
datalines;
101 Vikas 25 9374747373 vikas@gmail.com 234390876344
102 Nikita 23 9086746353 Nikita@gmail.com 128743526709
103 Ginni 27 9845637238 Ginni@gmail.com 980706509823
105 Sonoo 35 Sonoo@gmail.com 123214567876
106 Gaurav 26 Gaurav@gmail.com 123454326789
107 Ayush 24 Ayush@gmail.com 234565432123
108 Harshita 23 Harshita@gmail.com 908756897645
104 Preeti 27 Preeti@gmail.com 987605432123
109 Mayur 28 Mayur@gmail.com 123213487654
110 Rajesh 29 Rajesh@gmail.com 456578987623
;
run;
数据集附加
data additional;
input employeeid address$ father$ mother$;
datalines;
101 bhopal narendra amrita
102 kolkata mohan anita
103 timarnee ramkumar vaishnavi
104 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=http://www.srcmini.com/combined;
run;
现在, 在SAS studio中执行此代码。
文章图片
输出
文章图片
当匹配不完美时 如果变量是公用的, 但数据集之间的数据值不公用, 会发生什么?
例如:
文章图片
在数据集母级中, 第二观察值(ID = 201)与数据集子级中的第二观察值(ID = 401)不匹配。匹配合并将如下所示:
Data third;
merge first second;
by id;
run;
结果
IDABC
101120both data sets are contributing to this observation
20134.only data set first contributed to this observation
301561both data sets contributed to this observation
让我们通过一个例子来理解:
在这里, 我们使用上面提到的示例, 但是更改了它的一些数据值。取两个数据集;一个是必不可少的, 另一个是附加的。现在, 我们在附加数据集中更改了两个变量ID的数据值, 让我们看看结果如何。
Data essential;
input employeeid name$ age mobile email$ adhar$;
datalines;
101 Vikas 25 9374747373 vikas@gmail.com 234390876344
102 Nikita 23 9086746353 Nikita@gmail.com 128743526709
103 Ginni 27 9845637238 Ginni@gmail.com 980706509823
104 Sonoo 35 9893235487 Sonoo@gmail.com 123214567876
105 Gaurav 26 9893235445 Gaurav@gmail.com 123454326789
106 Ayush 24 9893235432 Ayush@gmail.com 234565432123
107 Harshita 23 9893232345 Harshita@gmail.com 908756897645
108 Preeti 27 9993235487 Preeti@gmail.com 987605432123
109 Mayur 28 9893235432 Mayur@gmail.com 123213487654
110 Rajesh 29 9893235409 Rajesh@gmail.com 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=http://www.srcmini.com/combined;
run;
在SAS Studio中执行此代码
文章图片
输出
文章图片
在上面的代码中, 你可以看到, 变量ID在必需数据集和附加数据集中都是通用的, 但是变量ID的两个数据值(在图像中突出显示, 一个由绿色突出显示, 另一个由红色突出显示)在数据集” 附加” 中发生了变化。
当我们在SAS Studio中执行此代码时, 它将根据数据集” 基本” 中提到的数据值生成输出(请考虑输出图像), 但是如果在日志窗口中进行检查, 则会看到错误消息。
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语句一起用于两个合并数据集
句法
merge mother (in=a) child (in=b);
/* x &
y are your choices of names */
2.在数据步骤中, 适当使用” IN =变量” 。
让我们通过一个例子来理解:
文章图片
Data other;
1. merge mother (in=a) child (in=b);
/* a &
b are your choices of names */
2. by id;
3. if a=1 and b=1;
4. run;
文章图片
我们可以在输出中看到;其他数据集仅保留匹配ID的数据值。
- 如果我们只想保留贡献观测值, 则将值1赋给变量a和b。
- 如果我们只想保留不起作用的观测值, 则给变量a和b赋0。
文章图片
如果你不仅要保留匹配的数据值, 还要跟踪不匹配的数据值的不同数据集, 则可以通过以下方式创建三个数据集:
1. data other /* other, other1, other2 are your choices of data set names */
2. other1
3. other2;
4. merge one(in= a) two(in= b);
5. by id;
6. if a = 1 &
b = 1 then output other;
/* write all matches to other */
7. if a = 1 &
b = 0 then output other1;
8. if a = 0 and b = 1 then outputother2;
9. run;
摘要 因此, 这全部与合并数据集有关。在本节中, 我们了解了什么是SAS合并数据集, 如何合并两个或多个数据集以及在数据集不匹配时会发生什么。
希望你清楚地理解了该主题。但是, 如果你仍然有任何问题, 请在我们的联系方式部分中询问。
推荐阅读
- SAS格式化数据集详细图解
- 在SAS中写入数据集图解
- 在SAS中读取原始数据图解
- SAS对多个变量排序详细图解
- 在SAS数据集中排序
- SAS优势 | SAS编程语言的缺点
- SAS,R与Python的区别详细对比
- Error querying database. Cause: java.lang.IllegalArgumentException: Mapped Statements collection doe
- Android---mediaplayer 创建和调用顺序