Variable höchster Bildungsabschluss Zielperson

Liebes NEPS-Forum,

ich möchte im Rahmen meiner Masterarbeit mit dem NEPScomp Datensatz der SC4 arbeiten und interessiere mich für den höchsten erreichten Bildungsabschluss der Zielpersonen. Über die Variablensuche finde ich die Variable ts33214_g1 „Höchster Bildungsabschluss Kind (ISCED-97)“, die es im comp_Datensatz (gesucht über des Codebuch) leider nicht gibt. Ich würde es gerne vermeiden mit den SUF zu arbeiten und bin gerade dabei zu überlegen, ob es die Möglichkeit gibt die Variable aus den bestehenden Variablen des NEPScomp zu erstellen. Bisher ist mir leider keine Möglichkeit eingefallen. Hat jemand anderes dazu eine Idee?

Lieben Gruß

Hallo Katrin!

Entschuldige die späte Antwort. Wir waren nicht untätig. Leider muss ich dir Recht geben: Es ist nicht möglich, den höchsten Bildungsabschluss einer Person im NEPScomp der SC4 zu ermitteln. Das tut mir sehr leid.

Wir werden NEPScomp in Zunkunft weiter ausbauen damit solche Probleme minimiert werden können.

Damit du trotzdem weiterarbeiten kannst, habe ich die eine kommentierte Stata-Syntax geschrieben, wie du den höchsten Bildungsabschluss (hier ISCED-97) der Version 15-0-0 des regulären SC4-SUFs an NEPScomp anspielen kannst. Leider fehlen Informationen zu den maximalen Bildungsabschlüssen sofern die Zielperson nie an einer CATI-Befragung teilgenommen hat. So reduziert sich die Fallzahl auf 12883 Personen. Ich hoffe, das reicht dir aus.

Falls du eine R-Syntax benötigst, können wir das auch mit etwas Vorlaufzeit liefern. KI-Lösungen sind dabei aber in der Regel auch ganz gut.

Melde dich auch gerne, wenn wir dir auf sonst noch helfen können - das hilft uns auch bei der Verbesserung von NEPScomp.

Herzliche Grüße
Dietmar


/*********************************************************
*********************************************************
 GESAMTVORGEHEN:
 1. Interview-Datumsangaben abspeichern
 2. Höchsten Bildungsabschluss und Abschlussdatum aus dem Education-Datensatz des SC4-SUF 15-0-0 extrahieren 
 3. Aufbereitete Daten aus 1. und 2. zusammenführen: Abschlussdatum, höchster ISCED aus Education (SC4-SUF)
 mit Interviewdatum und Welle aus SC4_NEPScomp_States_1-0-0 (NEPScomp) über ID_t matchen und Interviewdatum mit Abschlussdatum abgleichen um die richtige Welle des Abschlusses zu ermitteln
*********************************************************
**********************************************************/



*********************************************************
// 1. Interview-Datumsangaben abspeichern
use ID_t wave  CohortProfile_g1 using "PFAD_ZU_SC4-NEPSCOMPDATEN/SC4_NEPScomp_States_1-0-0.dta", clear
rename CohortProfile_g1 intdate  // Datumsvariable, die die Monate seit Januar 1970 zählt
replace intdate = -99999999 if missing(intdate) // wenn das Interviewdatum missing ist, vergebe ich hier einen sehr kleinen Wert zum Datumsabgleich zwischen Interviewdatum und Abschlussdatum
save "PFAD_ZU_EIGENEN_DATEN/temp_interview_dates.dta", replace
*********************************************************


*******************************************************************************************
/* 2. Höchsten Bildungsabschluss aus dem Education-Datensatz des SC4-SUF 15-0-0 extrahieren 
- ISCED-Variable, Datum des Abschlusses und ID_t behalten
	- wenn an ISCED-97 analog zu ts33214_g1 gewünscht, tx28103 wählen
	- wenn an ISCED-2011 gewünscht, tx28104 wählen
- monatsbasiertes Abschlussdatum aus datey und datem generieren (date_abschluss)
- Wie viele Beobachtungen gibt es im Datensatz und wie viele Personen?
- maximalen ISCED ermitteln (ISCED97_max)
	- nur den maximalen ISCED behalten
	- bei Duplikaten: entweder den jüngsten oder ältestens höchsten Abschluss behalten
	- überprüfen, ob nur eine Beobachtung pro Person überig bleibt (isid ID_t)
*/

// Education-File der SC4 öffen, da gibt es die höchsten Bildungsabschlüsse für alle, die mind. bis Welle 3 mitgemacht haben und einen Abschluss in einem Episodenmodul des CATI angaben
use "PFAD_ZU_SC4-SUFDATEN/SC4_Education_D_15-0-0.dta", clear
keep ID_t datem datey tx28103 // nur relevante Variablen behalten

generate date_abschluss = ym(datey, datem) // Datumsvariable generieren, die die Monate seit Januar 1970 zählt (analog zu CohortProfile_g1 aka intdate in SC4_NEPScomp_States)
label variable date_abschluss "Datum Bildungsabschluss"
format date_abschluss %tm // Datum menschenlesbar machen

// Höchsten ISCED-97 analog zu Data Manual SC6 auf S.72 bilden:
bysort ID_t: egen ISCED97_max = max(tx28103)
label value ISCED97_max `: value label tx28103'

// nun behalten wir nur die Zeilen mit den höchsten Bildungsabschlüssen der Zielpersonen:
keep if tx28103 == ISCED97_max


// gibt es nur noch eine Beobachtung pro Person? Dabei hilft "isid"
//isid ID_t // >>Fehlermeldung, nein es gibt nicht nur eine Zeile pro ID_t 

// wie viele Zeilen sind im Datensatz?
count 
// >> 13152

// Nach "Duplikaten in Hinsicht auf ID_t suchen:"
duplicates report ID_t

/*
>> Observations - Surplus = Personen:
>> 12619 		- 0 	  = 12619 Personen mit einen höchsten Abschluss
>> 518 			- 259     =   259 Personen mit zwei  höchsten Abschlüssen
>> 15 			- 10      =     5 Personen mit drei  höchsten Abschlüssen
-------------------------------------------------------------
>> 12619 + 259 + 5 = 12883 Personen im Datensatz
>> 0 + 259 + 10	   =   269 Zeilen zu viel
-------------------------------------------------------------
>> 12883 + 269 = 13152 Zeilen im Datensatz
>> es sollen aber nur 12619 Zeilen sein
*/

/* Einige Personen haben mehrere maximale Bildungsabschlüsse (z.B. zwei Bachelor-Abschlüsse)
>> Welcher dieser Abschlüsse ist relevant, der erste oder der letzte oder soll ein anderes Kriterium herangezogen werden? */
// in diesem Beispiel wähle ich den ältersten/ersten höxhsten Abschluss für jede Person ( folglich sortiert nach Datum des Abschlusses)
bysort ID_t (date_abschluss): keep if _n== 1 // nur den ersten Fall innerhalb der Sortierung behalten

isid ID_t // ist nur eine Angabe pro Person übrig?
// >> ja, denn keine Fehlermeldung


*******************************************************************************************
/* 3. Abschlussdatum, höchster ISCED aus Education (SC4-SUF)
 mit Interviewdatum und Welle aus SC4_NEPScomp_States_1-0-0 (NEPScomp) über ID_t matchen
- Abschlusswelle generieren	(wave_abschluss)
- Check der Syntax aus Plausibilität
- ggfs. Statusvariable, wann Abschluss erreicht ist
*/

// Das Interviewdatum und das Abschlussdatum über ID_t matchen und nur die Zielpersonen behalten, die in beiden Datensätzen vorkommen
merge 1:m ID_t using "PFAD_ZUR_EIGENEN_DATEN/temp_interview_dates.dta", keep(using match) generate(merge_dates)

isid ID_t wave  //check, ob Datensatz der Panelstruktur folgt


*****************************************
// Welle des Abschlusses generieren...
*****************************************
generate wave_abschluss_temp = -55 // -55 steht für nicht ermittelbar

// Abgleich von Interviewdatum und Abschlussdatum...

// Wenn der Abschluss vor dem ersten Interview erfolgte, wird die erste Welle der Zielperson als Welle des Abschlusses gewählt
bysort ID_t (intdate): replace wave_abschluss_temp = wave 	if date_abschluss <= intdate  & _n == 1  // (_n == 1 -> erste Welle der Zielperson)
														
// wenn das Abschlussdatum nicht jünger als das Interviewdatum, aber älter als das Interviewdatum der Vorwelle ist, wird die aktuelle Welle als Abschlusswelle gewählt, weil der Abschluss zwischen diesen beiden Wellen erfolgte und übicherweise in der Folgewelle berichtet wird														
bysort ID_t (intdate): replace wave_abschluss_temp = wave 	if 	date_abschluss <= intdate & /// 
															date_abschluss > intdate[_n-1] & /// (intdate[_n-1]  -> Interviewdatum der Vorwelle)
															_n > 1 & !missing(intdate) // (_n > 1 -> welle ist nicht erste Welle der Zielperson)
														
// Information aus wave_abschluss in alle Zeilen einer Person schreiben
bysort ID_t (wave): egen wave_abschluss =  max(wave_abschluss_temp)
label values wave_abschluss `: value label wave' // Wertelabel der Variable wave auch für wave_abschluss_g1 verwenden
label variable wave_abschluss "Welle des höchsten Bildungsabschlusses"

// Statusvariable generieren, die anzeigt, ob höchster Abschluss in Welle X erreicht ist
generate abschluss_status = 0 	if wave < wave_abschluss  &  wave_abschluss > 0	// noch kein Abschluss
 replace abschluss_status = 1 	if wave == wave_abschluss &  wave_abschluss > 0	// Abschluss in dieser Welle
 replace abschluss_status = 2 	if wave > wave_abschluss  &  wave_abschluss > 0 	// "Abschluss in früherer Welle"

 label define abschluss_stat_lb 0 "noch kein Abschluss" 1 "Abschluss in dieser Welle" 2"Abschluss in früherer Welle"
label values abschluss_status abschluss_stat_lb
label variable abschluss_status "Status höchster Abschluss: schon erreicht?"

foreach variable in  tx28103 wave_abschluss abschluss_status {
	replace `variable' = -21 if merge_dates == 2 & missing(`variable') | `variable' == -55
	label define `: value label `variable'' -21"keine Daten aus Education verfügbar", modify
}

// notwendige Variablen behalten
keep ID_t tx28103 wave wave_abschluss abschluss_status intdate date_abschluss


format %25.0g tx28103

save "PFAD_ZU_EIGENEN_DATEN/max_ISCED97.dta", replace

Danke sehr, Dietmar! Ich denke ich habe es geschafft!