【发布时间】:2013-01-06 01:11:10
【问题描述】:
我觉得我在这里遗漏了一些非常基本的东西......
我正在尝试合并 Stata、FranceSQ.dta 和 FranceHQ.dta 中的两个数据集。它们都有一个我创建的名为“uid”的变量,用于唯一标识观察结果。
use FranceSQ, clear
merge 1:1 uid using FranceHQ, gen(_merge) keep(match)
现在让我感到困惑的是,它告诉我 uid 不能唯一标识我的观察结果。我意识到发生的事情是,当我打开 FranceSQ 时,一切正常,当我查看我的 uid 变量时,我有以下值...
25010201
25010202
25010203
...
但是一旦我尝试运行合并,它会改变我所有的值,所以我看到...
2.50101e+10
2.50101e+10
2.50101e+10
...
任何帮助将不胜感激...我敢肯定有一个简单的答案,但它现在躲避我。
*** 编辑 ***
所以尼克的建议有所帮助,谢谢!这就是我做错了,所以我想知道是否有人可以指出为什么它不起作用。
1) 我通过连接两个数值变量在每个数据集中创建了 uid 变量,这将 uid 变量转换为字符串。
2) 我在整个数据集上运行了 destring(因为有很多不正确的转换变量),这将 uid 变成了一个 double。
3)然后我将 uid 重铸为字符串。正是由于这个原因,我无法进行初始合并。我注意到它将我所有观察结果更改为的值是数据集中的最后一个值。
4) 仅仅因为我在进行调整,我将 uid 变量重新转换为 double,并且得到了相同的结果。
现在我终于通过重新开始而不是首先将 uid 变量重新转换为字符串来让它工作,但我仍然不知道为什么我以前的努力没有奏效,或者如何合并command 实际上决定改变我的价值观。
【问题讨论】:
-
最好不要在这种情况下使用“重铸”这个词,因为有一个
recast命令。我认为您是在暗指中间的tostring操作,它可能应该包含一个format()选项,指定将保留所有数字的数字格式。 -
最好把你的代码贴出来,否则我们只能隐约猜到你做了什么。