2011-09-07 11 views
8

Essendo un utente R, sto imparando Stata ora usando la risorsa this e sono perplesso riguardo al comando merge.confronto dei comandi di unione tra R e Stata

In R, non mi devo preoccupare di unire i dati in modo errato, perché unisce comunque tutto. Non è necessario preoccuparsi se le colonne comuni contengono duplicati, poiché il dataframe Y si unirà a ciascuna riga duplicata nel dataframe X. (utilizzando in merge)

Ma per Stata, ho bisogno di rimuovere le righe duplicate da X prima di procedere all'unione.

È stato ipotizzato in Stata che, per fare in modo che merge continui, la colonna comune nella tabella principale deve essere univoca?

+0

per la fusione di problemi in Stata trovo [MMERGE] (http://econpapers.repec.org/software/bocbocode/s420201.htm) davvero utile. – radek

+2

Nota: A partire da Stata 11, le caratteristiche di 'mmerge' sono state incorporate nel comando" unione "ufficiale. –

risposta

6

La risposta alla tua domanda è No. Proverò a spiegare perché.

Il collegamento menzionato copre solo un tipo di unione che è possibile con Stata, vale a dire l'unione uno-a-molti.

merge 1:m varlist using filename

altri tipi di fusione sono possibili:

One-to-one di unione su variabili chiave specificate

merge 1:1 varlist using filename

molti-a-uno di unione su variabili chiave specificate

merge m:1 varlist using filename

molti-a-molti merge su variabili chiave specificate

merge m:m varlist using filename

One-to-one merge dall'osservazione

merge 1:1 _n using filename

dettagli, spiegazioni ed esempi può essere trovato in help merge.

Se non si sa se le osservazioni sono unici in un insieme di dati, è possibile effettuare le seguenti operazioni di controllo:

bysort idvar: gen N = _N

ta N

Se trovate valori di N che sono maggiori di 1, sai che le osservazioni non sono uniche rispetto a idvar.

Questa è infatti la nuova sintassi del comando merge che è stato introdotto con Stata 11. Prima di Stata 11, il comando di unione era un po 'più semplice. È sufficiente dovuto ordinare i dati, e quindi si potrebbe fare:

merge varlist using filename

A proposito, si può ancora usare questa vecchia sintassi nel Stata 11 o superiore.

+2

Buon lavoro con una risposta abbastanza completa. Si noti che la sintassi più vecchia era più semplice, ma è stata modificata perché causava tutti i tipi di problemi difficili da rilevare quando i dati non erano quelli previsti. L'uso della vecchia sintassi funziona ancora ma restituisce un avviso. –

+0

@ gsk3: buon commento. Personalmente, mi ci è voluto un po 'di tempo per adottare la nuova sintassi di fusione nei miei programmi e classifiche. La nuova sintassi appare e si sente a prima vista più complicata. Tuttavia, ripagherà rapidamente in quanto potrebbe attirare l'attenzione sui problemi nei dati. –

+2

È un onore a Stata che hanno fatto qualcosa per rendere il loro linguaggio più difficile da capire all'inizio, ma meglio a lungo termine. Soprattutto perché la maggior parte dei loro clienti non proviene da ambienti di programmazione e quindi è improbabile ottenere immediatamente quanto molte cose come questa (forse più simile a una forte digitazione) migliorano le loro vite :-) –

0

joinby, non corrispondente (entrambi) è il comando che corrisponde al comando R unione.

In particolare si fondono m: m NON esegue molti e molti si uniscono (cioè un join completo) contrariamente a quanto implica la documentazione.