2011-09-07 134 views
8

作爲一名R用戶,我正在使用this資源學習Stata,並且對merge命令感到困惑。R和Stata合併命令比較

在R中,我不必擔心錯誤地合併數據,因爲無論如何它會合並所有內容。如果公共列包含任何重複項,我不必擔心,因爲Y數據幀將合併到X數據幀中的每個重複行。 (在merge中使用all=FALSE

但是對於Stata,我需要在繼續合併之前從X中刪除重複的行。

是否在Stata中假定,爲了繼續merge,主表中的公共列必須是唯一的?

+0

在Stata的合併問題,我找到[MMERGE(http://econpapers.repec.org/software/bocbocode/s420201.htm)真的很有用。 – radek

+2

僅供參考:從Stata 11開始,「mmerge」的功能已被納入「官方」merge合併命令中。 – 2011-09-08 08:12:12

回答

6

您的問題的答案是否定的,我會盡力解釋原因。

您提到的鏈接僅涵蓋Stata可能實現的一種合併類型,即一對多合併。

merge 1:m varlist using filename

其他類型的合併是可能的:

一到一個指定的關鍵變量

合併

merge 1:1 varlist using filename

多到一個指定的關鍵變量合併

merge m:1 varlist using filename

通過觀察

merge 1:1 _n using filename

細節,解釋和例子指定關鍵變量

merge m:m varlist using filename

一到一個合併

許多一對多的合併可以在help merge找到。

如果你不知道,如果觀測數據集中的唯一,你可以做以下檢查:

bysort idvar: gen N = _N

ta N

如果發現是大於1的N值,你知道觀察對於idvar來說並不是唯一的。

這實際上是Stata 11引入的merge命令的新語法。在Stata 11之前,merge命令更簡單一些。你根本就對數據進行排序,然後你可以做:

merge varlist using filename

順便說一句,你仍然可以使用這個舊的語法在Stata 11或更高版本。

+2

一個相當全面的答案的好工作。請注意,較早的語法比較簡單,但是它們對它進行了更改,因爲當數據不符合預期時,它會導致各種難以檢測到的問題。使用舊的語法仍然有效,但會返回警告。 –

+0

@ gsk3:好評。就我個人而言,我花了一些時間在我的程序和主題註釋中採用新的合併語法。新語法的外觀和感覺乍一看更加複雜。但是,它會很快得到回報,因爲它可能會提請您注意數據中的問題。 – 2011-09-07 10:53:37

+2

Stata認爲他們做了一些事情讓他們的語言一開始就變得難以理解,但從長遠來看更好。特別是因爲他們的大多數客戶不是來自編程背景,因此不太可能立即得到這種類似的東西(可能類似於強打字)改善他們的生活:-) –

0

joinby,無與倫比(兩者)是對應於R命令合併命令。

在特定合併L:M沒有做一個多對多的合併(即完全連接)違背了文件意味着什麼。