如何在stata中合并数据

时间:2015-08-07 12:37:32

标签: merge stata

我正在学习stata,并试图理解合并。有人可以解释不同种类的合并给我的区别吗? (1:1,1:m,m:1,m:m)?

1 个答案:

答案 0 :(得分:1)

如果Stata manual不清楚,请点击此处。

首先,清理术语非常重要。

merge基本上连接两个数据集中的行(Stata称之为observations)基于指定的变量或变量列表,称为key变量。您必须从内存中已有的一个数据集开始(Stata将其称为master数据集),并为其merge另一个数据集(另一个数据集称为using数据集)。您剩下的是一个数据集,其中包含master中的所有变量,以及usingmaster中尚未存在的_merge中的任何变量。它还会生成一个名为master的新变量,指示using中的行是否在master中,反之亦然。合并的数据集(除非另有说明)将包含usingmaster中的所有行,无论两者之间的关键变量是否匹配。

“唯一标识符”的概念很重要。如果变量(或变量组合)在每一行中具有不同的值,则它唯一地标识行。这对于1:1,1:m等的细节很重要。

  • 1:1表示密钥变量在两个数据集中都提供唯一标识符。您将留下内存中两个数据集的所有行。
  • 1:m表示using数据集中的关键变量唯一标识行,但master数据集中的关键变量不能。您仍将保留两个数据集中的所有行,但如果关键变量在使用数据集中具有重复的观察值,则master数据集将获得重复项以匹配它们。
  • m:1与1:m相反。 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) | +----------------------------+ 数据集中的关键变量确实存在。
  • m:m有点奇怪。关键变量不能唯一地标识任一数据集中的行,因此您将从两侧留下重复的行。

示例:

<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>