如何在Stata中将堆叠的纵向数据集与字符串变量ID进行合并?

时间:2015-06-12 14:00:30

标签: merge stata

我一直尝试将我最初从MS Excel导入的三个Stata文件与6个字符的字符串ID代码(例如n5fpeb)合并失败。它们作为str6变量存储在Stata数据文件中。

我已经记录了一些其他变量,这些变量也识别每个观察 - 一个数字参与者ID和一个学校ID号,因为每个参与者都是学生。我的主数据集采用堆叠格式,因为我的数据是纵向的。当我尝试1:m合并(即merge 1:m id using "C:\Users ... May.dta", generate(_merge1))时,Stata会返回以下错误消息:variable id does not uniquely identify observations in the master data

我已阅读各种指南,但无法弄清楚数据集未能合并的原因。我可以使用错误的命令吗?或许字符串变量或多个字符串变量让Stata感到困惑?我想学习如何将未来的观察结果干净地添加到我的主数据集中。

2 个答案:

答案 0 :(得分:1)

我会尝试解释错误

  

变量id不能唯一标识主数据中的观察结果

看看这个数据集

clear
input ///
id date metric
1 25 45
1 26 98
1 27 54
2 23 09
2 24 13
2 25 87
end

list, sepby(id)

正如你所说的那样,它是纵向(面板)数据。虽然我们有一个名为id的变量,但这并不意味着变量唯一地标识了观察。事实上,它没有。如果我要用datemetric覆盖(比如用一张纸),那么您将无法根据变量id唯一地识别每个观察;对于所有三个观察每个主题id具有相同的值。

现在滑动您的纸张,以便同时看到iddate。因为两个变量的组合创建了唯一值对(即1 / 25,1 / 26,1 / 27,2 / 23,...),然后两个变量一起唯一标识观察结果。请注意,merge命令接受varlist,因此您可以指定多个变量。

Stata在您的merge 1:m id抱怨任意,它希望id 唯一地识别观察,但事实并非如此。此外,它说问题在于数据,即当前加载的数据。

运行

duplicates report id
duplicates report id date
加载示例数据集后

,单独使用id时会看到重复项,但id date没有重复项。

如果您提供代表性的示例数据集(主数据集和使用数据集),以及最终数据集的外观,您可能会获得所需命令的特定帮助。有关指南,请参阅this page

答案 1 :(得分:0)

问题的解决方案取决于您尝试与主数据集合并的确切内容。根据您的描述,我认为您的主数据的每个参与者都是通过数字ID或字符串ID来标识的。既然你提到它是一个纵向的堆叠文件,我猜想还有一个年变量(或其他时间变量)。

如果您尝试合并的数据集是对相同数据的更多观察(相同的变量,可能只是更多年),请查看append命令。

如果您尝试合并的数据集位于参与者级别,那么William是正确的,您需要m:1。这是因为您对主文件中相同参与者的许多观察结果相互叠加。 1:m期望在堆栈中只找到每个id的一个副本。

如果您尝试合并的数据集处于参与者年级(即也是纵向),那么您需要merge 1:1 id year ...(或您的时间变量)。如果您的观察堆栈中每个id和year对只有一个副本(即每个时间段每个参与者只有一个记录),这将有效。请注意,如果您的数据不干净且存在多个数据,则无法使用。

希望这有帮助!