Hallo liebes Team:)
Ich sitze gerade an meiner Masterarbeit und versuche mich in stata und den NEPS Daten noch einzulesen. Ich untersuche, inwieweit die Erwerbstätigkeit den Studienerfolg beeinflusst. Dafür habe ich mir Variablen aus den o. g. Datensätzen rausgesucht und versuche diese nun zu mergen. Das klappt allerdings nur nicht all zu gut. Hier mein Code:
// ************************************************************
// 1. Arbeitsverzeichnis setzen
// ************************************************************
cd „…Eigene Dateien\Masterarbeit_NEPS_Daten\stata14“
// ************************************************************
// 2. spVocTrain mit Biography mergen → Studienepisode
// ************************************************************
use „SC5_spVocTrain_D_19-0-0.dta“, clear
keep ID_t wave splink tg24170_g5 ts15211 ts15201 ts1511y ts1511m ts1512y ts1512m subspell
keep if subspell == 0
tempfile voctrain
save `voctrain’
use „SC5_Biography_D_19-0-0.dta“, clear
merge 1:1 ID_t wave splink using `voctrain’, keep(master match)
drop _merge
keep if sptype == 24 // 24 = Studium laut NEPS
replace ts15201 = . if inlist(ts15201, -28, -29, -55, -92, -97, -98) // Ungültige Werte bereinigen
keep if subspell == 0 // Nur harminisierte Episoden
keep if inrange(ts15201, 9, 10) // Nur Uni / FH
replace tg24170_g5 = . if inlist(tg24170_g5, -22, -55, -92, -95, -96, -97, -98)
keep if inrange(tg24170_g5, 1, 8)
*drop if missing(tg24170_g5) // Nur mit Studienfach
drop if missing(ts1511y, ts1511m, ts1512y, ts1512m) // Nur vollständige Datumsangaben
gen studium_start = ym(ts1511y, ts1511m) // Startdatum aus Jahr und Monat
gen studium_end = ym(ts1512y, ts1512m) // Enddatum aus Jahr und Monat
format %tm studium_start studium_end // Formatierung als Monatsdatum
drop if missing(studium_start) | missing(studium_end) // Nur vollständige Start- und Enddaten
gen duration = studium_end - studium_start
bysort ID_t (duration): keep if _n == _N // Längste Episode für jede Person auswählen
rename tg24170_g5 studienfach_spell
tempfile studium
save `studium’
// ************************************************************
// 3. spEmp mit Biography mergen → Erwerbsepisode
// ************************************************************
use „SC5_spEmp_D_19-0-0.dta“, clear
keep ID_t wave splink tg2608b ts2311y ts2311m ts2312y ts2312m ts23256 ts23257 subspell
keep if subspell == 0
tempfile spemp
save `spemp’
use „SC5_Biography_D_19-0-0.dta“, clear
merge 1:1 ID_t wave splink using `spemp’, keep(master match)
drop _merge
keep if sptype == 26 // 26 = Erwerbstätigkeit laut NEPS
replace tg2608b = . if inlist(tg2608b, -54, -55, -97, -98) // Ungültige Werte bereinigen
keep if inrange(tg2608b, 1, 8)
drop if missing(ts23256, ts23257, ts2311y, ts2311m, ts2312y, ts2312m) // Nur vollständige Datumsangaben
gen erwerb_start = ym(ts2311y, ts2311m) // Startdatum aus Jahr und Monat
gen erwerb_end = ym(ts2312y, ts2312m) // Enddatum aus Jahr und Monat
gen erwerb_dauer = erwerb_end - erwerb_start + 1
format %tm erwerb_start erwerb_end // Formatierung als Monatsdatum
drop if missing(erwerb_start) | missing(erwerb_end) // Nur vollständige Start- und Enddaten
bysort ID_t (erwerb_dauer): keep if _n == _N // Längste Episode für jede Person auswählen
rename tg2608b erwerbstätigkeit_art
rename ts23256 stud_erwerbstätig
tempfile arbeit
save `arbeit’
// ************************************************************
// 4. Merge Studien- und Erwerbsepisode
// ************************************************************
use `studium’, clear
merge 1:1 ID_t using `arbeit’, keep(master match)
drop _merge
save „studium_arbeit.dta“, replace
// ************************************************************
// 6. Merge der Hintergrunddaten mit CohortProfile
// ************************************************************
use „SC5_CohortProfile_D_19-0-0.dta“, clear
keep ID_t wave tx8600y tx8600m
replace tx8600y = . if inlist(tx8600y, -54, -55, -56) // Ungültige Werte bereinigen
replace tx8600m = . if inlist(tx8600m, -54, -55, -56) // Ungültige Werte bereinigen
gen wave_date = ym(tx8600y, tx8600m) // Wellenzeitpunkt in Monatsform
format wave_date %tm
bysort ID_t wave: keep if _n == 1
tempfile cohortprofile
save `cohortprofile’
// ************************************************************
// 5. Hintergrunddaten aus pTargetCATI
// ************************************************************
use „SC5_pTargetCATI_D_19-0-0.dta“, clear
keep ID_t wave t700001 t70000y t731301 t731303 t731310 t731351 t731353 t731360 t66406a t66407a t66408a t66406b t66407b t66408b t66406c t66407c t66408c t66406d t66407d t66408d t66405a t66405b t66405c t66405d
replace t700001 = . if inlist(t700001, -55)
replace t70000y = . if inlist(t70000y, -55)
replace t731301 = . if inlist(t731301, -20, -54, -97, -98)
replace t731303 = . if inlist(t731303, -20, -54, -55, -97, -98)
replace t731310 = . if inlist(t731310, -54, -98)
replace t731351 = . if inlist(t731351, -20, -54, -97, -98)
replace t731353 = . if inlist(t731353, -20, -54, -55, -97, -98)
replace t731360 = . if inlist(t731360, -54, -98)
replace t66406a = . if inlist(t66406a, -54)
replace t66407a = . if inlist(t66407a, -54, -98)
replace t66408a = . if inlist(t66408a, -54, -97, -98)
replace t66406b = . if inlist(t66406b, -54)
replace t66407b = . if inlist(t66407b, -54, -97, -98)
replace t66408b = . if inlist(t66408b, -54, -97)
replace t66406c = . if inlist(t66406c, -54, -98)
replace t66407c = . if inlist(t66407c, -54, -97, -98)
replace t66408c = . if inlist(t66408c, -54, -98)
replace t66406d = . if inlist(t66406d, -54, -98)
replace t66407d = . if inlist(t66407d, -54, -97)
replace t66408d = . if inlist(t66408d, -54, -97, -98)
replace t66405a = . if inlist(t66405a, -54, -97, -98)
replace t66405b = . if inlist(t66405b, -54, -97, -98)
replace t66405c = . if inlist(t66405c, -54, -98)
replace t66405d = . if inlist(t66405d, -54, -98) // Nur vollständige Datumsangaben
rename t700001 geschlecht
rename t70000y geburtsjahr
// Motivation berechnen
egen mot_intrinsisch = rowmean(t66405a t66405b t66405c t66405d)
egen mot_leistung = rowmean(t66406* t66407*)
egen mot_extrinsisch = rowmean(t66408a t66408b t66408c t66408d)
*collapse (mean) mot_intrinsisch mot_leistung mot_extrinsisch, by(ID_t) // Die bereits berechneten Mittelwerte sollen für jeden ID_t aggregiert werden
tempfile ptargetcati
save `ptargetcati’
use `cohortprofile’, clear
merge 1:1 ID_t wave using `ptargetcati’, keep(master match)
drop _merge
save „cati.dta“, replace
// ************************************************************
// 7. Studiumfach und Note aus pTargetCAWI
// ************************************************************
use ID_t wave tg51311_g5 tg52020 t241014 t531043 t531021 using „SC5_pTargetCAWI_D_19-0-0.dta“, clear
replace tg51311_g5 = . if inlist(tg51311_g5, -55, -91, -96, -97, -99) // Ungültige Werte bereinigen
keep if inrange(tg51311_g5, 1, 8) // Von Pädagogik- bis Dienstleistungsstudienfächer
replace tg52020 = . if inlist(tg52020, -20, -28, -29, -91, -92, -97, -98, -99) // Ungültige Werte bereinigen
keep if inrange(tg52020, 1.00, 5.00) // Note 1,0 bis 5,0
rename tg51311_g5 studienfach_panel
rename tg52020 note
// Erwerbstätigkeitsintensität (Stunden pro Woche)
gen arbeitsstunden = t241014
// Kategorisierung der Arbeitsstunden in Gruppen
gen arbeitsstunden_gruppe = .
replace arbeitsstunden_gruppe = 1 if inrange(t241014, 0, 10)
replace arbeitsstunden_gruppe = 2 if inrange(t241014, 11, 20)
replace arbeitsstunden_gruppe = 3 if inrange(t241014, 21, 30)
replace arbeitsstunden_gruppe = 4 if inrange(t241014, 31, 40)
replace arbeitsstunden_gruppe = 5 if inrange(t241014, 41, 85)
label define arbeitszeit 1 „0 bis 10 Stunden“ 2 „11 bis 20 Stunden“ 3 „21 bis 30 Stunden“ 4 „31 bis 40 Stunden“ 5 „41 bis 85 Stunden“
label values arbeitsstunden_gruppe arbeitszeit
// BaföG Dummy für Erhalt
gen bafög_dummy = (t531043 == 1) if !missing(t531043) // 1=ja und 0=nein
// BaföG-Höhe
// Kategorien: 1-200 | 201-400 | 401-600 | 601-800 | 801-1000
gen bafög_höhe = .
replace bafög_höhe = 1 if inrange(t531021, 1, 200)
replace bafög_höhe = 2 if inrange(t531021, 201, 400)
replace bafög_höhe = 3 if inrange(t531021, 401, 600)
replace bafög_höhe = 4 if inrange(t531021, 601, 800)
replace bafög_höhe = 5 if inrange(t531021, 801, 1000)
label define BaföG_Höhe 1 „1 bis 200 €“ 2 „201 bis 400 €“ 3 „401 bis 600 €“ 4 „601 bis 800 €“ 5 „801 bis 1000 €“
label values bafög_höhe BaföG_Höhe
tempfile ptargetcawi
save `ptargetcawi’
use `cohortprofile’, clear
merge 1:1 ID_t wave using `ptargetcawi’, keep(master match)
drop _merge
save „cawi.dta“, replace
use „cati.dta“, clear
merge 1:1 ID_t wave using „cawi.dta“, keep(master match)
drop _merge
save „caticawi.dta“, replace
use „caticawi.dta“, clear
merge 1:1 ID_t wave using „studium_arbeit.dta“, keep(master match)
drop _merge
*bysort ID_t wave: keep if _n == _N // Duplikate löschen und nur eine Zeile pro Welle erhalten
*duplicates drop
save „master_final_version.dta“, replace
Ich verstehe tatsächlich nicht, warum ich die einzelnen Datensätze nicht richtig mergen kann. Laut stata klappt der merge zwar, aber ich verliere jede Menge Beobachtungen, womit der merge wieder hinfällig ist.
Vielleicht kann mir jemand helfen?
Vielen Dank schon einmal im Voraus:)
LG
Thorben