我一直尝试将我最初从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感到困惑?我想学习如何将未来的观察结果干净地添加到我的主数据集中。
答案 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
的变量,但这并不意味着变量唯一地标识了观察。事实上,它没有。如果我要用date
和metric
覆盖(比如用一张纸),那么您将无法根据变量id
唯一地识别每个观察;对于所有三个观察每个主题,id
具有相同的值。
现在滑动您的纸张,以便同时看到id
和date
。因为两个变量的组合创建了唯一值对(即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对只有一个副本(即每个时间段每个参与者只有一个记录),这将有效。请注意,如果您的数据不干净且存在多个数据,则无法使用。
希望这有帮助!