我正在学习stata,并试图理解合并。有人可以解释不同种类的合并给我的区别吗? (1:1,1:m,m:1,m:m)?
答案 0 :(得分:1)
如果Stata manual不清楚,请点击此处。
首先,清理术语非常重要。
merge
基本上连接两个数据集中的行(Stata称之为observations
)基于指定的变量或变量列表,称为key
变量。您必须从内存中已有的一个数据集开始(Stata将其称为master
数据集),并为其merge
另一个数据集(另一个数据集称为using
数据集)。您剩下的是一个数据集,其中包含master
中的所有变量,以及using
中master
中尚未存在的_merge
中的任何变量。它还会生成一个名为master
的新变量,指示using
中的行是否在master
中,反之亦然。合并的数据集(除非另有说明)将包含using
和master
中的所有行,无论两者之间的关键变量是否匹配。
“唯一标识符”的概念很重要。如果变量(或变量组合)在每一行中具有不同的值,则它唯一地标识行。这对于1:1,1:m等的细节很重要。
using
数据集中的关键变量唯一标识行,但master
数据集中的关键变量不能。您仍将保留两个数据集中的所有行,但如果关键变量在使用数据集中具有重复的观察值,则master
数据集将获得重复项以匹配它们。using
数据集中的关键变量不能唯一标识行,但** make a dataset and save as a tempfile called `b'. Note that k uniquely identifies rows
set obs 3
gen k = _n
gen b = "b"
list
+-------+
| k b |
|-------|
1. | 1 b |
2. | 2 b |
3. | 3 b |
+-------+
tempfile b
save `b'
** make another dataset and merge `b' to it. Note that k uniquely identifies rows
set obs 3
gen k = _n
gen a = "a"
list
+-------+
| k a |
|-------|
1. | 1 a |
2. | 2 a |
3. | 3 a |
+-------+
merge 1:1 k using `b'
list
+-------------------------+
| k a b _merge |
|-------------------------|
1. | 1 a b matched (3) |
2. | 2 a b matched (3) |
3. | 3 a b matched (3) |
+-------------------------+
** make another dataset and merge `b' to it. Note that k does not uniquely identify rows and that k=2 and k=3 do not exist in the master dataset
clear
set obs 3
gen k = 1
gen a = "a"
list
+-------+
| k a |
|-------|
1. | 1 a |
2. | 1 a |
3. | 1 a |
+-------+
merge m:1 k using `b'
list
+----------------------------+
| k a b _merge |
|----------------------------|
1. | 1 a b matched (3) |
2. | 1 a b matched (3) |
3. | 1 a b matched (3) |
4. | 2 b using only (2) |
5. | 3 b using only (2) |
+----------------------------+
数据集中的关键变量确实存在。示例:
<groupId>com.bwort.core</groupId>
<artifactId>bwort</artifactId>
<packaging>pom</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>bwort</name>
<modules>
<module>proj1</module>
<module>proj2</module>
<module>proj3</module>
</modules>