Befehl Merge - Datensätze zusammenführen

Allgemeine Fragen rund um Statistik mit Stata.

Befehl Merge - Datensätze zusammenführen

Beitragvon VerenaR » Fr 21. Mai 2021, 14:05

Hallo zusammen,

ich habe ein großes Problem beim "Mergen" mehrerer Datensätze. Ich habe einen Masterdatensatz erstellt und möchte diesen mit weiteren Datensätzen mergen.


Masterfile:

obs: 1,164,296 SOEP-Core, v36 (EU Edition),
doi:10.5684/soep.core.v36eu
vars: 15 21 May 2021 13:45
-----------------------------------------------------------------------------------------
storage display value
variable name type format label variable label
-----------------------------------------------------------------------------------------
hid long %12.0g ID Haushalt
pid long %12.0g Unveraenderliche Personennummer
syear long %12.0g Erhebungsjahr
persnr long %12.0g Unveraenderliche Personennummer
parid long %12.0g Unveraenderliche Personen-id des Partners
sex byte %49.0g sex Geschlecht
gebjahr int %12.0g Geburtsjahr -4Steller-
psample byte %63.0g psample Stichprobenart
netto float %67.0g netto Aktueller Befragungsstatus
pop float %71.0g pop Aktuelle Populationszugehoerigkeit
loc1989 float %49.0g loc1989 Where did you live in 1989?
migback byte %49.0g migback Migrationshintergrund
birthregion_ew byte %49.0g birthregion_ew
Eindeutiges Bundesland Geburtsort (Ost-West
Version)
pbleib double %12.0g Inverse Bleibewahrscheinlichkeit
phrf double %12.0g Hochrechnungsfaktor
-----------------------------------------------------------------------------------------
Sorted by: pid syear

Dabei bilden PID und SYEAR die Keyvariables, die in beiden Datensätzen vorhanden sind, und auf Basis dessen ich merge:

merge 1:1 pid syear using "$MY_IN\pgen.dta", keep(match) keepus(pgbilzeit pgpsbilo pgpsbila) nogen

merge m:1 pid using "$MY_IN\biosib.dta", keep(match) keepus(num_sib) nogen => SYEAR nicht vorhanden daher nur auf Basis von PID

merge 1:1 pid syear using "$MY_IN\biol.dta", keep(match) keepus(lb0057) nogen

Dies funktioniert einwandfrei ohne weitere Problemmeldung.

. merge 1:1 pid syear using "$MY_IN\pgen.dta", keep(match) keepus(pgbilzeit pgpsbilo pgps
> bila) nogen
(note: variable syear was long, now double to accommodate using data's values)

Result # of obs.
-----------------------------------------
not matched 0
matched 719,608
-----------------------------------------

.
. merge m:1 pid using "$MY_IN\biosib.dta", keep(match) keepus(num_sib) nogen
(label sex already defined)

Result # of obs.
-----------------------------------------
not matched 0
matched 115,476
-----------------------------------------

.
. merge 1:1 pid syear using "$MY_IN\biol.dta", keep(match) keepus(lb0057) nogen

Result # of obs.
-----------------------------------------
not matched 0
matched 12,022
-----------------------------------------

Wenn ich allerdings die Reihenfolge des Mergens ändere kommt es zu unterschiedlichen "matched results". Woran kann das liegen? Mache ich etwas falsch?

. merge 1:1 pid syear using "$MY_IN\biol.dta", keep(match) keepus(lb0057) nogen

Result # of obs.
-----------------------------------------
not matched 0
matched 123,753
-----------------------------------------

. merge m:1 pid using "$MY_IN\biosib.dta", keep(match) keepus(num_sib) nogen
(label sex already defined)

Result # of obs.
-----------------------------------------
not matched 0
matched 12,039
-----------------------------------------

. merge 1:1 pid syear using "$MY_IN\pgen.dta", keep(match) keepus(pgbilzeit pgpsbilo pgps
> bila) nogen
(note: variable syear was long, now double to accommodate using data's values)

Result # of obs.
-----------------------------------------
not matched 0
matched 12,022
-----------------------------------------

Ich freue mich über Hilfe und vielen Dank im Voraus!

Verena
VerenaR
 
Beiträge: 1
Registriert: Fr 21. Mai 2021, 13:36
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Befehl Merge - Datensätze zusammenführen

Beitragvon Staxa » Sa 22. Mai 2021, 10:27

Soweit ich weiß gibt es für das SOEP einen Data Wizard, Basket oder dergleichen, um sich den Code automatisch generieren zu lassen. Früher war das mal http://panel.gsoep.de/soepinfo2017/, aber es soll inzwischen wohl eine Aktualisierung geben. Letztlich ist das SOEP komplex und hier kann der Teufel im Detail liegen. Aufgefallen ist mir nur, dass du bei deinen Matches nicht alle Fälle in den Daten belässt, nämlich immer dann, wenn du keep(match) nimmst. Immer, wenn also ein match nicht möglich ist, werden dann Fälle gelöscht, was nachfolgende merges beeinflussen kann. Das würde ich als erstes prüfen.
Stata für Anfänger: www.statabook.com
Staxa
 
Beiträge: 680
Registriert: Di 27. Feb 2018, 12:56
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post


Zurück zu Statistik allgemein

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron