2016-12-14 4 views
2

Ich habe Schwierigkeiten bei der Kombination von Datasets für ein Projekt. Unser primärer Datensatz wird von einzelnen Richtern organisiert. Es ist ein Attribut-Dataset.Stata Merge mit mehreren Match-Variablen

judge 
    j | x | y | z 
----|----|----|---- 
    1 | 2 | 3 | 4 
    2 | 5 | 6 | 7 

Der zweite Datensatz ist eine Falldatenbank. Jede Beobachtung ist ein Fall und Richter können in einer von drei Variablen erscheinen.

case 
case | j1 | j2 | j3 | year 
-----|----|----|----|----- 
    1 | 1 | 2 | 3 | 2002 
    2 | 2 | 3 | 1 | 1997 

Wir möchten die Falldatenbank in die Attribut-Datenbank merge, durch judge entsprechen. Für jeden Fall, dass ein judge in j1, j2 oder j3 erscheint, würde eine Beobachtung für diesen Fall hinzugefügt werden, um einen Datensatz zu erstellen, der wie folgt aussieht.

combined 
    j | x | y | z | case | year 
---|----|----|----|-------|-------- 
    1 | 2 | 3 | 4 | 1 | 2002 
    1 | 2 | 3 | 4 | 2 | 1997 
    2 | 5 | 6 | 7 | 1 | 2002 
    2 | 5 | 6 | 7 | 2 | 1997 

Meine beste Vermutung ist

rename j1 j 
merge 1:m j using case 
rename j j1 
rename j2 j 
merge 1:m j using case 

jedoch zu verwenden, ich bin nicht sicher, dass dies funktionieren wird, vor allem, da die Verschmelzung Dataset drei mögliche Variablen hat, dass die j Identifizierung in auftreten kann.

Antwort

0

Ihre Beispiele sind klar, aber noch besser wären sie als Code, der keine technischen Änderungen erfordert, um das Gerüst zu entfernen. Siehe dataex von SSC (ssc inst dataex).

Es ist ein Fall der fehlenden reshape, denke ich.

clear 
input j x y z 
    1 2 3 4 
    2 5 6 7 
end 
save judge 

clear 
input case j1 j2 j3 year 
    1 1 2 3 2002 
    2 2 3 1 1997 
end 

reshape long j , i(case) j(which) 

merge m:1 j using judge 

list 

    +-------------------------------------------------------+ 
    | case which j year x y z   _merge | 
    |-------------------------------------------------------| 
    1. | 1  1 1 2002 2 3 4  matched (3) | 
    2. | 2  3 1 1997 2 3 4  matched (3) | 
    3. | 2  1 2 1997 5 6 7  matched (3) | 
    4. | 1  2 2 2002 5 6 7  matched (3) | 
    5. | 2  2 3 1997 . . . master only (1) | 
    |-------------------------------------------------------| 
    6. | 1  3 3 2002 . . . master only (1) | 
    +-------------------------------------------------------+ 

drop if _merge < 3 
list 

    +---------------------------------------------------+ 
    | case which j year x y z  _merge | 
    |---------------------------------------------------| 
    1. | 1  1 1 2002 2 3 4 matched (3) | 
    2. | 2  3 1 1997 2 3 4 matched (3) | 
    3. | 2  1 2 1997 5 6 7 matched (3) | 
    4. | 1  2 2 2002 5 6 7 matched (3) | 
    +---------------------------------------------------+