如何在 Stata 中将堆叠的纵向数据集与字符串变量 ID 合并?
How can I merge stacked, longitudinal datasets with string variable ID's in 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 returns 出现以下错误消息:variable id does not uniquely identify observations in the master data
.
我已经阅读了各种指南,但无法弄清楚为什么数据集不会合并。我可以使用错误的命令吗?或者可能是字符串变量或多个字符串变量混淆了 Stata?我想学习如何将未来的观察干净利落地添加到我的主数据集中。
您的问题的解决方案取决于您尝试与主数据集合并的具体内容。根据您的描述,我认为您的主数据中的每个参与者都由数字 ID 或字符串 ID 标识。既然你提到它是一个纵向的、堆叠的文件,我猜还有一个年份变量(或其他一些时间变量)。
如果您尝试合并的数据集是对相同数据(相同变量,也许只是更多年)的更多观察,请查看 append
命令。
如果您尝试合并的数据集是参与者级别的,那么 William 是对的,您想要 m:1
。这是因为您在主文件中对同一参与者的许多观察结果相互叠加。 1:m
希望在堆栈中只找到每个 id 的一个副本。
如果您尝试合并的数据集处于参与者年级别(即也是纵向的),那么您需要 merge 1:1 id year ...
(或任何时间变量)。如果您的观察堆栈中每个 id 和年份对只有一个副本(即每个时间段的每个参与者只有一个记录),这将起作用。请注意,如果您的数据不干净并且不止一个,这将不起作用。
希望对您有所帮助!
我会尝试解释错误
variable id does not uniquely identify observations in the master data
看看这个数据集
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
的变量,但这并不意味着该变量唯一标识了观察结果。事实上,它没有。如果我要覆盖(比如用 sheet 纸)关于 date
和 metric
的信息,您将无法根据变量 id
;对于每个对象的所有三个观察 ,id
具有相同的值。
现在滑动 sheet 张纸,这样您就可以同时看到 id
和 date
。因为两个变量的组合创建了唯一值对(即 1/25、1/26、1/27、2/23、...),所以 both 个变量,放在一起, 唯一标识观测值。请注意,merge
命令接受 varlist
,因此您可以指定多个变量。
Stata 在您的 merge 1:m id
中抱怨,它期望 id
到 唯一地 识别观察结果,但它没有。此外,它说问题出在 master 数据,即当前加载的数据。
运行
duplicates report id
duplicates report id date
加载示例数据集后,单独使用 id
时您会看到重复项,但 id date
.
没有重复项
如果您提供有代表性的示例数据集(master 和 using),以及最终数据集的外观,您可能会获得有关所需命令的具体帮助。有关指南,请参阅 this page。
我一直在尝试将我最初从 MS Excel 导入的三个 Stata 文件与 6 个字符的字符串 ID 代码(例如 n5fpeb
)合并,但没有成功。它们作为 str6
变量存储在 Stata 数据文件中。
我记录了一些其他变量,这些变量也可以识别每个观察结果——数字参与者 ID 和学校 ID 号,因为每个参与者都是学生。我的主数据集采用堆叠格式,因为我的数据是纵向的。当我尝试 1:m 合并(即 merge 1:m id using "C:\Users ... May.dta", generate(_merge1)
)时,Stata returns 出现以下错误消息:variable id does not uniquely identify observations in the master data
.
我已经阅读了各种指南,但无法弄清楚为什么数据集不会合并。我可以使用错误的命令吗?或者可能是字符串变量或多个字符串变量混淆了 Stata?我想学习如何将未来的观察干净利落地添加到我的主数据集中。
您的问题的解决方案取决于您尝试与主数据集合并的具体内容。根据您的描述,我认为您的主数据中的每个参与者都由数字 ID 或字符串 ID 标识。既然你提到它是一个纵向的、堆叠的文件,我猜还有一个年份变量(或其他一些时间变量)。
如果您尝试合并的数据集是对相同数据(相同变量,也许只是更多年)的更多观察,请查看 append
命令。
如果您尝试合并的数据集是参与者级别的,那么 William 是对的,您想要 m:1
。这是因为您在主文件中对同一参与者的许多观察结果相互叠加。 1:m
希望在堆栈中只找到每个 id 的一个副本。
如果您尝试合并的数据集处于参与者年级别(即也是纵向的),那么您需要 merge 1:1 id year ...
(或任何时间变量)。如果您的观察堆栈中每个 id 和年份对只有一个副本(即每个时间段的每个参与者只有一个记录),这将起作用。请注意,如果您的数据不干净并且不止一个,这将不起作用。
希望对您有所帮助!
我会尝试解释错误
variable id does not uniquely identify observations in the master data
看看这个数据集
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
的变量,但这并不意味着该变量唯一标识了观察结果。事实上,它没有。如果我要覆盖(比如用 sheet 纸)关于 date
和 metric
的信息,您将无法根据变量 id
;对于每个对象的所有三个观察 ,id
具有相同的值。
现在滑动 sheet 张纸,这样您就可以同时看到 id
和 date
。因为两个变量的组合创建了唯一值对(即 1/25、1/26、1/27、2/23、...),所以 both 个变量,放在一起, 唯一标识观测值。请注意,merge
命令接受 varlist
,因此您可以指定多个变量。
Stata 在您的 merge 1:m id
中抱怨,它期望 id
到 唯一地 识别观察结果,但它没有。此外,它说问题出在 master 数据,即当前加载的数据。
运行
duplicates report id
duplicates report id date
加载示例数据集后,单独使用 id
时您会看到重复项,但 id date
.
如果您提供有代表性的示例数据集(master 和 using),以及最终数据集的外观,您可能会获得有关所需命令的具体帮助。有关指南,请参阅 this page。