R和Stata之间的合并命令比较

lok*_*art 8 merge r stata

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

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

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

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

小智 6

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

您提到的链接仅涵盖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不同.

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

merge varlist using filename

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

  • 一个非常全面的答案,干得好.请注意,较旧的语法更简单,但它们更改了它,因为当您的数据不符合预期时,它会导致各种难以检测的问题.使用旧语法仍然有效,但会返回警告. (2认同)
  • 对Stata来说,他们做了一些事情,使他们的语言起初更难理解,但从长远来看更好.特别是因为他们的大多数客户不是来自编程背景,因此不太可能立即得到这样的事情(也许最类似于强类型)改善他们的生活:-) (2认同)