【问题标题】:Stata merging changing my values?Stata 合并改变了我的价值观?
【发布时间】: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() 选项,指定将保留所有数字的数字格式。
  • 最好把你的代码贴出来,否则我们只能隐约猜到你做了什么。

标签: merge stata


【解决方案1】:

这很可能是精度问题。长整数需要保存在 longdouble 数据类型中。您可能需要在merge 之前添加一个标识符recast

您应该通过查看describe 的结果来检查uid 在两个数据集中是否具有相同的数据类型。

【讨论】:

    【解决方案2】:
    1. 要检查您的变量是否真正识别观察结果,请键入isid uid。如果在执行mergeuid 不是唯一标识符,Stata 会抱怨,但这本身就是一个有用的检查。如果uid 在两个文件中都通过了检查,它仍然应该在合并文件中这样做;它必须至少在一个源文件中失败才能在合并文件中失败。
    2. 除了 Nick Cox 关于data types 的回答之外,问题可能只是格式化。输入 describe uid 以了解当前格式是什么,可能是 format uid %12.0f 以摆脱科学记数法。
    3. 我认为 Stata 会在需要时将变量提升为更准确的格式,例如当您 replace 具有非整数值的整数值变量时;当您在一个数据集中使用 byte 值并合并来自另一个数据集的同一变量的 float 值时,merge 也会发生同样的事情。
    4. uid 中的缺失值可能是 Stata 认为此变量不能正常工作的原因。在merge 之前和之后也检查这些内容(请参阅我上面提到的关于每种类型的有效范围的help data types)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-02
      • 1970-01-01
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-25
      • 1970-01-01
      相关资源
      最近更新 更多