SC5: Mergen von StudyState, ptargetCATI, spchild, spemp

Liebes FDZ-Team,

für eine Hauarbeit arbeite ich mit dem Scientific Use File des NEPS. Für meine Analyse benötige ich bestimmte Variablen, die in den vier verschiedenen Datensätzen des NEPS enthalten sind: StudyState, ptargetCATI, spchild und spemp.

Nun wollte ich im ersten Schritt die Datensätze mergen.
Zunächst habe ich StudyState mit ptargetCATI gemerged:
use „Datensatz von StudyState“, clear
merge 1:1 ID_t wave using „Datensatz von ptargetCATI“, keep (master matched) nogenerate keepusing (meine Variablen)
save „Datensatz Merge von StudyState und ptargetCATI“
→ das hat soweit auch funktioniert.

Nun wollte ich den Datensatz spchild an den oben erstellten mergen.

use „Datensatz vn spchild“, clear
keep if subspell ==0
save „Datensatz spchild harmonisiert“

use „Datensatz Merge von StudyState und ptargetCATI“, clear
merge m:1 ID_t wave using „Datensatz spchild harmonisiert“, keep (master matched) nogen keepusing (meine Variablen).

Dann bekomme ich folgende Nachricht : variables ID_t wave do not uniquely identify observations in the using data

Mir ist bewusst, dass ich anscheinend die falsche Linking Variable genutzt habe. Aber woher bekomme ich die notwendige raus? Das gleiche Problem werde ich bestimmt bei spemp auch haben.

Ist die Vorgehensweise von mir grundsätzlich erstmal richtig oder muss ich den Biography-Datensatz einbauen?

Ich würde mich über eine Rückmeldung freuen und bedanke mich schon im Voraus :slight_smile:

Liebe Grüße
Anika

Hallo Anika!

ja, du soltest auf keinen Fall einfach die wave-Variable benutzen um Spelldaten und pTarget-Daten zusammenzuspielen. Du musst ein sogenanntes Monatssplitting durchführen. Dabei solltest du dir im klaren sein, was du genau erreichen willst. Hier im Beispiel habe ich die Geburtsdaten der Kinder mit dem jeweiligen Interviewdatum gemerged. Wenn du spEmp verwendest, kannst du dir aus dem Start- und/oder Enddatum der Erwerbsepisoden eine Variable generieren um diese dann mit dem Interviewdatum zu mergen. Es ist nicht zwingend notwendig den Biography-Datensatz zu verwenden.

Wenn du das Ganze aber im Rahmen einer Hausarbeit machst, ist das schon ein ziemlich hoher Aufwand. Ich würde so etwas erst bei einer Masterarbeit anstreben.

Viel Erfolg
Dietmar

/*
Wichtige Info: Spelldaten auf Basis der wave-Variable zu matchen, ist höchst problematisch, da der Wellenindikator nur angibt, in welcher Welle das Interview stattfand, nicht aber wann das Ereignis passiert ist. Aus diesem Grund sollte man die Daten auf Basis von Interviewdatum und Ereignisdatum zusammenspielen >> Monatssplitting
*/

// 1. Monatssplitting: CohortProfile so erweitern, dass es je Monat zwischen zwei Interviewzeitpunkten eine Zeile gibt:
use "SC5_CohortProfile_D_18-0-0.dta", clear

keep ID_t wave tx8600y tx8600m tx8600d tx80521 tx80220
nepsmiss

// Inteviewdatum als eine Variable generieren:
generate intdate = ym(tx8600y,tx8600m)
format %tm intdate*
sort ID_t intdate
// Wenn zwei Interviews innerhalb eines Monats, wird aufgrund der Tagesvariable beim späteren Interview ein Monat addiert
bysort ID_t intdate (tx8600d): replace intdate = intdate + 1 if _N == 2 & _n==_N
keep if !missing(intdate)
isid ID_t intdate

// ja eine Zeile pro Monat erzeugen
bysort ID_t (intdate): generate duration = intdate - intdate[_n-1] if ID_t == ID_t[_n-1] // Abstand zwischen zwei Interviews ermitteln
expand duration // Zeilen mit dem Abstand multiplizieren
bysort ID_t intdate: generate line = _n-1 // Laufindex innerhalb eines Interviewdatums generieren
generate month = intdate - line // Datum pro Monat generieren
format %tm month // Lesbares Format
sort ID_t month // sortieren
isid ID_t month // checken, ob ID_t+ month unique Kombination ist

keep ID_t wave month
tempfile cp
save "`cp'", replace // als temporären Datensatz speichern


*****************************************

// 2. Wenn man Zeilen der Geburt der Kinder mit den Interviewdatum verknüpfen will, muss man auch hier eine Variable "month" generieren
use "SC5_spChild_D_18-0-0.dta", clear
replace ts3320m = ts3320m -20 if inrange(ts3320m,21,32)  // Quartalsangaben in Monate umkodieren
replace ts3320m = 7 if inlist(ts3320m,-98,-97) // als Proxy Juli für Geburtsmonat einsetzen, wenn verweigert

generate month = ym(ts3320y,ts3320m)
keep if !missing(month)
keep if subspell == 0
format %tm month
keep ID_t child died ts3333c ts33208 ts33207 ts3320m ts3320y ts33203 ts33212 month

// Es gibt einige Zwillinge, daher müssen diese doppelten Zeilen pro Monat in eine Zeile transformiert werden - das geschieht mit eine Reshape ins wide-format
foreach var in child died ts3333c ts33208 ts33207 ts3320m ts3320y ts33203 ts33212 {
	rename `var' `var'_
}
bysort ID_t month (child): gen nr = _n
reshape wide *_ , i(ID_t month) j(nr)


***************************************************
// 3. CohortProfile (1.) + spChild (2.) via ID_t+month mergen
merge 1:1 ID_t month using "`cp'", generate(merge_cp_spChild) keep(matched)

duplicates tag ID_t wave, generate(dup_wave)
drop if dup_wave > 0   // es gibt 14 Duplikate >> mehrfachgeburten zwischen zwei Wellen >> ich droppe diese der Einfachheit halber

// leere Variablen droppen
foreach var of varlist *_3 {
	capture: assert missing(`var')
	if _rc == 0 drop `var'
}

drop dup_wave
isid ID_t wave
tempfile cp_spChild
save "`cp_spChild'", replace

************************************************
// 4.  Nun kann man alle Datensätze mit der 1:1-Long-Struktur von ID_t+wave zusammenspielen
merge 1:1 ID_t wave using "SC5_pTargetCATI_D_18-0-0.dta", generate(merge_cpspChild_CATI)