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