【问题标题】:merge command comparison between R and StataR和Stata之间的合并命令比较
【发布时间】:2011-09-07 08:01:30
【问题描述】:

作为 R 用户,我现在正在使用 this 资源学习 Stata,并且对 merge 命令感到困惑。

在 R 中,我不必担心错误地合并数据,因为它无论如何都会合并所有内容。如果公共列包含任何重复项,我无需担心,因为Y 数据帧将合并到X 数据帧中的每个重复行。 (在merge 中使用all=FALSE

但是对于 Stata,我需要在继续合并之前从 X 中删除重复的行。

在 Stata 中是否假设,为了让merge 继续进行,主表中的公共列必须是唯一的?

【问题讨论】:

  • 对于在 Stata 中合并问题,我发现 MMERGE 非常有用。
  • 仅供参考:从 Stata 11 开始,mmerge 的功能已被纳入“官方”merge 命令中。

标签: r merge stata


【解决方案1】:

您的问题的答案是否定的。我将尝试解释原因。

您提到的链接仅涵盖Stata可能的一种合并类型,即一对多合并。

merge 1:m varlist using filename

其他类型的合并也是可能的:

指定关键变量的一对一合并

merge 1:1 varlist using filename

指定关键变量的多对一合并

merge m:1 varlist using filename

指定关键变量的多对多合并

merge m:m varlist using filename

通过观察进行一对一合并

merge 1:1 _n using filename

详细信息、解释和示例可以在help merge 中找到。

如果您不知道数据集中的观察值是否唯一,可以进行以下检查:

bysort idvar: gen N = _N

ta N

如果您发现 N 的值大于 1,您就知道观察值对于 idvar 而言不是唯一的。

这其实是Stata 11引入的merge命令的新语法。在Stata 11之前,merge命令稍微简单一些。您只需对数据进行排序,然后就可以:

merge varlist using filename

顺便说一句,您仍然可以在 Stata 11 或更高版本中使用这种旧语法。

【讨论】:

  • 做得很好,答案很全面。请注意,旧语法更简单,但他们更改了它,因为当您的数据不符合预期时,它会导致各种难以检测的问题。使用旧语法仍然有效,但会返回警告。
  • @gsk3:很好的评论。就个人而言,我花了一些时间在我的程序和课堂笔记中采用新的合并语法。新语法乍一看更加复杂。但是,它会很快获得回报,因为它可能会引起您对数据问题的关注。
  • Stata 值得称赞的是,他们做了一些事情来使他们的语言起初更难理解,但从长远来看会更好。特别是因为他们的大多数客户都没有编程背景,因此不太可能立即了解这样的事情(也许最类似于强类型)改善了他们的生活:-)
  • 命令isid 提供了一种更简单的方法来测试变量是否是唯一标识符。
【解决方案2】:

joinby, unmatched(both) 是对应于R命令合并的命令。

特别是合并 m:m 不会进行多对多合并(即完全连接),这与文档所暗示的相反。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 2014-04-22
    • 1970-01-01
    相关资源
    最近更新 更多