Unsicherheiten mit dem Merging sowie der Erstellung eines Sister Samples

Hallo liebe community,

zunächst einmal möchte ich kurz mein Ziel der Daten Aufarbeitung aufzeigen: Ich möchte den Effekt der mütterlichen Gesundheit auf die Abschlussnote des Kindes schätzen. Außerdem möchte ich die Abschlussnote der Kinder zwischen der Mutter und deren Schwestern variieren lassen, sodass ich ein sister sample erstellen muss. Ich arbeite mit soep v39.

Da meine abhängige Variable die Abschlussnote des Kindes ist, ist dies mein „master data set“. Leider bin ich sehr unsicher ob ich das „Merge-Verhältnis“ (1:1, 1:m, m:1 oder m:m) richtig gewählt habe. Könnte jemand mir Feedback diesbezüglich geben?

Außerdem weiß ich grade nicht weiter, wie ich am Besten ein sister sample erstellen sollte, weil wenn ich alle Geschlechter der Geschwister auf weiblich restriktiere, verliere ich sehr viele Beobachtungen.

Ich bin über jegliche Hilfe dankbar!

Mein Code:

pull master data set**********************************************************
use pid mnr using „$MY_IN\bioparen.dta“, clear

keep if mnr > 0
sort pid

*merge latest grades in the child’s main subjects (children > 17 / vnr)
merge 1:m pid using „$MY_IN\jugendl.dta“, keep(master match) ///
keepus(syear jl0156 jl0154 jl0152) nogen

sort pid syear

save $MY_OUT\child.dta, replace

pull mother data set**********************************************************
use pid hid syear parid sex gebjahr using „$MY_IN\ppathl.dta“, clear

drop if sex == 1
sort pid syear

*merge siblings and sex of the siblings
merge m:1 pid using „$MY_IN\biosib.dta“, keep(master match) ///
keepus(sibpnr1 sibpnr2 sibpnr3 sibpnr4 sibpnr5 sibpnr6 sibpnr7 sibpnr8 ///
sibpnr9 sibpnr10 sibpnr11 sexsib1 sexsib2 sexsib3 sexsib4 sexsib5 ///
sexsib6 sexsib7 sexsib8 sexsib9 sexsib10 sexsib11) nogen

*merge health
merge 1:m pid syear using „$MY_IN\health.dta“, keep(master match) ///
keepus(mcs pcs) nogen

rename pid mnr
sort mnr syear

save $MY_OUT\mother.dta, replace

merge data sets (children & mothers)******************************************
use „$MY_OUT\child.dta“, clear

sort mnr syear

merge m:1 mnr syear using „$MY_OUT\mother.dta“, keep(master match) nogen

save $MY_OUT\data.dta, replace

*recode missing values
use „$MY_OUT\data.dta“, clear

mvdecode _all, mv(-1 -2 -3 -4 -5 -6 -7 -8)
misstable sum

Hallo Vrein,

Vielen Dank für die Nutzung des Forums.
Aktuell warte ich noch auf eine Antwort und hoffe, dir diese in Kürze liefern zu können.

Liebe Grüße
Philipp

Hallo Philipp,

danke fürs Bescheid geben. Damit ich Dir (hoffentlich) ein bisschen Arbeit ersparen kann, lasse ich dir noch meinen überarbeiteten Code zu kommen. Beim Sister Sample bestehen immer noch Schwierigkeiten. Vielen Dank für deine Hilfe!

Liebe Grüße!

*To avoid error r(900)
*set maxvar 50000

*To avoid error r(693)
use pid syear hid cid inti ple0053 ple0055 ple0056 ple0072 ple0073 using „$MY_IN\pl.dta“, clear
save $MY_OUT\pl_small.dta, replace

pull master data set**********************************************************
use pid syear hid cid sex gebjahr using „$MY_IN\ppathl.dta“, clear
keep if syear >= 2000
sort syear pid

*merge latest grades in the child’s main subjects; type of school in last school year;
*year of birth (children >= 17)
merge 1:1 syear pid using „$MY_IN\jugendl.dta“, keep(master match) ///
keepus(jl0156 jl0154 jl0152 jl1634 jl0233) nogen

*merge social parents (only biological parents => biobirth)
merge m:m pid using „$MY_IN\bioparen.dta“, keep(master match) ///
keepus(mnr fnr) nogen

*generation of key variables
gen age = syear - jl0233 if jl0233 > 0 & jl0233 !=.

*Check for duplicates
bysort pid syear: gen count = _N
tab count
drop count

save $MY_OUT\child.dta, replace

pull mother data set**********************************************************
use pid syear hid cid parid sex gebjahr using „$MY_IN\ppathl.dta“, clear
keep if sex == 2
sort syear pid

*merge siblings and sex of the siblings
merge m:1 pid using „$MY_IN\biosib.dta“, keep(master match) ///
keepus(sibpnr1 sibpnr2 sibpnr3 sibpnr4 sibpnr5 sibpnr6 sibpnr7 sibpnr8 ///
sibpnr9 sibpnr10 sibpnr11 sexsib1 sexsib2 sexsib3 sexsib4 sexsib5 ///
sexsib6 sexsib7 sexsib8 sexsib9 sexsib10 sexsib11) nogen

*merge summary scale mental/physical
merge 1:1 syear pid using „$MY_IN\health.dta“, keep(master match) ///
keepus(mcs pcs) nogen

*merge hospital stay prev. year (yes/no); number of hospital stays prev. year;
*nights of hospital stay prev. year; number of doctor visits last three mths.;
*no doctor visit last three mths. (yes)
merge 1:1 syear pid using „$MY_OUT\pl_small.dta“, keep(master match) ///
keepus(ple0053 ple0055 ple0056 ple0072 ple0073) nogen

foreach var in sex gebjahr sibpnr1 sexsib1 sibpnr2 sexsib2 sibpnr3 sexsib3 sibpnr4 sexsib4 sibpnr5 sexsib5 sibpnr6 sexsib6 sibpnr7 sexsib7 sibpnr8 sexsib8 sibpnr9 sexsib9 sibpnr10 sexsib10 sibpnr11 sexsib11 mcs pcs ple0053 ple0055 ple0056 ple0072 ple0073 {
rename var' var’_m
}

rename pid mnr
drop sex_m

*generation of key variables
gen age_m = syear - gebjahr_m if gebjahr_m > 0 & gebjahr_m !=.
tab age_m
drop if age_m < 0
tab age_m

*Check for duplicates
bysort mnr syear: gen count = _N
tab count
drop count

save $MY_OUT\mother.dta, replace

pull father data set**********************************************************
use pid syear hid cid parid sex gebjahr using „$MY_IN\ppathl.dta“, clear
keep if sex == 1
sort syear pid

*merge siblings and sex of the siblings
merge m:1 pid using „$MY_IN\biosib.dta“, keep(master match) ///
keepus(sibpnr1 sibpnr2 sibpnr3 sibpnr4 sibpnr5 sibpnr6 sibpnr7 sibpnr8 ///
sibpnr9 sibpnr10 sibpnr11 sexsib1 sexsib2 sexsib3 sexsib4 sexsib5 ///
sexsib6 sexsib7 sexsib8 sexsib9 sexsib10 sexsib11) nogen

*merge summary scale mental/physical
merge 1:1 syear pid using „$MY_IN\health.dta“, keep(master match) ///
keepus(mcs pcs) nogen

*merge hospital stay prev. year (yes/no); number of hospital stays prev. year;
*nights of hospital stay prev. year; number of doctor visits last three mths.;
*no doctor visit last three mths. (yes)
merge 1:1 syear pid using „$MY_OUT\pl_small.dta“, keep(master match) ///
keepus(ple0053 ple0055 ple0056 ple0072 ple0073) nogen

foreach var in sex gebjahr sibpnr1 sexsib1 sibpnr2 sexsib2 sibpnr3 sexsib3 sibpnr4 sexsib4 sibpnr5 sexsib5 sibpnr6 sexsib6 sibpnr7 sexsib7 sibpnr8 sexsib8 sibpnr9 sexsib9 sibpnr10 sexsib10 sibpnr11 sexsib11 mcs pcs ple0053 ple0055 ple0056 ple0072 ple0073 {
rename var' var’_f
}

rename pid fnr
drop sex_f

*generation of key variables
gen age_f = syear - gebjahr_f if gebjahr_f > 0 & gebjahr_f !=.
tab age_f
drop if age_f < 0
tab age_f

*Check for duplicates
bysort fnr syear: gen count = _N
tab count
drop count

save $MY_OUT\father.dta, replace

merge data sets (children & parents)******************************************
use „$MY_OUT\child.dta“, clear

merge m:1 mnr syear using „$MY_OUT\mother.dta“, keep(master match) nogen
merge m:1 fnr syear using „$MY_OUT\father.dta“, keep(master match) nogen

*recode missing values
mvdecode _all, mv(-1 -2 -3 -4 -5 -6 -7 -8)
misstable sum

save $MY_OUT\data.dta, replace

Hallo Vrein,
Die Anzahl der beobachteten Kinder kann erhöht werden, in dem childl und biopupil einbezogen wird. Wenn Schwestern der Mütter notwendig sind, dann eventuell zusätzlich biol nutzen, da gibt es einige wenige Angaben über Geschwister. Generell liegen mehr Angaben zu den Kindern und deren Geschwistern vor, als über die Mutter und deren Geschwister.

Die Merge Befehle scheinen korrekt.

  • IDs:
  • Kinder:
    • bioparen: pid
    • jugendl: pid syear merge 1:m ist korrekt, da bioparen zeitkonstant und jugendl ein Long-Datensatz ist
    • hinzufügen biopupil: pid syear, merge analog jugendl
    • hinzufügen childl: pid syear, merge analog jugendl
  • Mutter:
    • ppathl: pid syear
    • biosib: pid (wenn Geschwister der Mutter gemeint sind, dann merge richtig)
    • health: pid (richtig zeitkonstant an zeitvariable Infos gemerged)

Viele liebe Grüße Jana

1 „Gefällt mir“

Hallo Jana,

vielen Dank, dass du dir Zeit genommen hast auf meine Frage(n) zu antworten.

Leider kann ich ich childl und biopupil nicht mit einbeziehen, weil ich nur an der letzten Abschlussnote im Hauptfach der Kinder interessiert bin. Diese wird im Youth Questionnaire erhoben und somit im jugendl Datensatz enthalten.

Danke für den Tipp mit biol, allerdings muss ich Geschwisterpaare identifizieren, weshalb ich die jeweiligen Identifier aus biosib benötige.

Und vielen Dank, dass du die meine Merge-Befehle angeschaut hast.

LG
Verena

Hallo Jana,

würdest du auch in dieser Weise ein Siblings-Sample erstellen? Hier am Beispiel bis Sibling-Number 3:

*To avoid error r(693)
use pid syear hid cid inti ple0008 ple0053 ple0055 ple0056 ple0072 ple0073 using „$MY_IN\pl.dta“, clear
save $MY_OUT\pl_small.dta, replace

pull master data set**********************************************************
use pid syear hid cid sex gebjahr using „$MY_IN\ppathl.dta“, clear
sort syear pid
keep if sex == 2
drop sex

*merge social parents (only biological parents => biobirth)
merge m:m pid using „$MY_IN\bioparen.dta“, keep(master match) ///
keepus(mnr fnr) nogen

*merge siblings and sex of the siblings
merge m:1 pid using „$MY_IN\biosib.dta“, keep(master match) ///
keepus(sibpnr1 sibpnr2 sibpnr3 sibpnr4 sibpnr5 sibpnr6 sibpnr7 sibpnr8 ///
sibpnr9 sibpnr10 sibpnr11 sexsib1 sexsib2 sexsib3 sexsib4 sexsib5 ///
sexsib6 sexsib7 sexsib8 sexsib9 sexsib10 sexsib11) nogen

*merge summary scale mental/physical
merge 1:1 syear pid using „$MY_IN\health.dta“, keep(master match) ///
keepus(mcs pcs) nogen

*merge current health; hospital stay prev. year (yes/no);
*number of hospital stays prev. year; nights of hospital stay prev. year;
*number of doctor visits last three mths.; no doctor visit last three mths. (yes)
merge 1:1 syear pid using „$MY_OUT\pl_small.dta“, keep(master match) ///
keepus(ple0008 ple0053 ple0055 ple0056 ple0072 ple0073) nogen

foreach var in hid cid gebjahr mcs pcs ple0008 ple0053 ple0055 ple0056 ple0072 ple0073 {
rename var' var’_m
}

*Check for duplicates
bysort pid syear: gen count = _N
tab count
drop count

save $MY_OUT\mother.dta, replace

pull sibling data set*********************************************************
use pid syear hid cid sex gebjahr using „$MY_IN\ppathl.dta“, clear
sort syear pid

*merge siblings and sex of the siblings
merge m:1 pid using „$MY_IN\biosib.dta“, keep(master match) ///
keepus(sibpnr1 sibpnr2 sibpnr3 sibpnr4 sibpnr5 sibpnr6 sibpnr7 sibpnr8 ///
sibpnr9 sibpnr10 sibpnr11 sexsib1 sexsib2 sexsib3 sexsib4 sexsib5 ///
sexsib6 sexsib7 sexsib8 sexsib9 sexsib10 sexsib11) nogen

merge 1:1 syear pid using „$MY_OUT\pl_small.dta“, keep(master match) ///
keepus(ple0008) nogen

save $MY_OUT\siblings.dta, replace

*sibling 1
use „$MY_OUT\siblings.dta“, clear

*merge siblings and sex of the siblings
merge m:1 pid using „$MY_IN\biosib.dta“, keep(master match) ///
keepus(sibpnr1 sexsib1) nogen

drop if sibpnr1 == .

foreach var in cid hid pid sex gebjahr ple0008 sibpnr1 sexsib1 {
rename var' var’_s1
}

drop sibpnr1_s1
drop sexsib1_s1

rename pid_s1 sibpnr1

save $MY_OUT\sibling1.dta, replace

*sibling 2
use „$MY_OUT\siblings.dta“, clear

*merge siblings and sex of the siblings
merge m:1 pid using „$MY_IN\biosib.dta“, keep(master match) ///
keepus(sibpnr2 sexsib2) nogen

drop if sibpnr2 == .

foreach var in cid hid pid sex gebjahr ple0008 sibpnr2 sexsib2 {
rename var' var’_s2
}

drop sibpnr2_s2
drop sexsib2_s2

rename pid_s2 sibpnr2

save $MY_OUT\sibling2.dta, replace

*sibling 3
use „$MY_OUT\siblings.dta“, clear

*merge siblings and sex of the siblings
merge m:1 pid using „$MY_IN\biosib.dta“, keep(master match) ///
keepus(sibpnr3 sexsib3) nogen

drop if sibpnr3 == .

foreach var in cid hid pid sex gebjahr ple0008 sibpnr3 sexsib3 {
rename var' var’_s3
}

drop sibpnr3_s3
drop sexsib3_s3

rename pid_s3 sibpnr3

save $MY_OUT\sibling3.dta, replace

pull grandmother data set*****************************************************
use pid syear hid cid sex gebjahr using „$MY_IN\ppathl.dta“, clear
sort syear pid
keep if sex == 2
drop sex

*merge amount of education or training in years
merge 1:m syear pid using „$MY_IN\pgen.dta“, keep(master match) ///
keepus(pgbilzeit) nogen

foreach var in hid cid gebjahr pgbilzeit {
rename var' var’_m_gm
}

*Check for duplicates
bysort pid syear: gen count = _N
tab count
drop count

rename pid mnr

save $MY_OUT\grandmother_m.dta, replace

pull grandfather data set*****************************************************
use pid syear hid cid sex gebjahr using „$MY_IN\ppathl.dta“, clear
sort syear pid
keep if sex == 1
drop sex

*merge amount of education or training in years
merge 1:m syear pid using „$MY_IN\pgen.dta“, keep(master match) ///
keepus(pgbilzeit) nogen

foreach var in hid cid gebjahr pgbilzeit {
rename var' var’_m_gf
}

*Check for duplicates
bysort pid syear: gen count = _N
tab count
drop count

rename pid fnr

save $MY_OUT\grandfather_m.dta, replace

data**************************************************************************
use „$MY_OUT\mother.dta“, clear

merge m:m sibpnr1 syear using „$MY_OUT\sibling1.dta“, keep(master match) nogen
merge m:m sibpnr2 syear using „$MY_OUT\sibling2.dta“, keep(master match) nogen
merge m:m sibpnr3 syear using „$MY_OUT\sibling3.dta“, keep(master match) nogen

merge m:1 mnr syear using „$MY_OUT\grandmother_m.dta“, keep(master match) nogen
merge m:1 fnr syear using „$MY_OUT\grandfather_m.dta“, keep(master match) nogen

drop mnr
drop fnr

rename pid mnr

*recode missing values
mvdecode _all, mv(-1 -2 -3 -4 -5 -6 -7 -8)

save $MY_OUT\mother_final.dta, replace

Kann ich so vorgehen?

Komisch ist auch, dass sexsib? mehr informationen enthält als sex_s?. Hier konnte ich beobachten, dass zum Teil Missing Values sind. Ein Fragezeichen soll die jeweilige Nummer darstellen, da ein Sternchen nicht funktioniert.

Im Anschluss würde ich den Mutter-Datensatz, der auch die Variablen der Sibling enthält, an den Kinder-Datensatz mergen.

Mein Ziel ist es die Differenz zwischen den Müttern und ihren Geschwister zunehmen, um family-fixed effects zu eleminieren.

Ich freue mich von Dir zu hören.

Liebe Grüße
Verena