Befehl Merge - Datensätze zusammenführen
Verfasst: 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
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