Mergen von einzelnen Variablen verschiedener Datensätze an mein Master File "pTarget"

Liebes NEPS-Team,

für meine Masterarbeit hat der Datensatz „pTarget“ der Startkohorte 6, Erwachsene, sehr viele interessante Variablen zu bieten. Darüber hinaus benötige ich die Variable ts11209, Schulabschluss der befragten Person, die sich in „spSchool“ befindet und die Variable ts15219, Ausbildungsabschluss der befragten Person, die in „spVocTrain“ vorhanden ist.

Mithilfe der Informationen aus dem Data Manual und der Merging-Matrix bin ich wie folgt vorgegangen, um die beiden Variablen aus den verschiedenen Datensätzen an mein Master File „pTarget“ anzuspielen:

*spSchool bearbeiten
use „$ORIGINAL6\SC6_spSchool_D_11-0-0.dta“, clear

  • only keep full or harmonized episodes
    keep if subspell==0

  • save this file temporarily
    tempfile tmp
    save „$ORIGINAL6\spSchool_subspell0.dta“


*spVocTrain bearbeiten
use „$ORIGINAL6\SC6_spVocTrain_D_11-0-0.dta“, clear

  • only keep full or harmonized episodes
    keep if subspell==0

  • save this file temporarily
    tempfile tmp
    save „$ORIGINAL6\spVocTrain_subspell0.dta“


*open the pTarget data file -> master file
use „$ORIGINAL6\SC6_pTarget_D_11-0-0“, clear
*1.126 var
*107.682 obs

*merge a variable from spSchool
merge 1:n ID_t wave using „$ORIGINAL6\spSchool_subspell0.dta“, ///
keepusing(ts11209) nogen // assert(master match)
*1.127 var
*128.749 obs
*38.337 matched

save „$ORIGINAL6\pTarget_spSchool_subspell0.dta“

use „$ORIGINAL6\pTarget_spSchool_subspell0.dta“, clear

*merge a variable from spVocTrain
merge 1:n ID_t wave using „$ORIGINAL6\spVocTrain_subspell0.dta“, ///
keepusing(ts15219) nogen // assert(master match)

Ich erhalte jedoch folgende Fehlermeldung:
variables ID_t wave do not uniquely identify observations in the master data

Meine Frage ist daher: Was habe ich falsch gemacht, bzw. wie spiele ich die beiden o.g. Variablen korrekt an mein Master File „pTarget“ an?

Vielen Dank im Voraus für die Rückmeldung!

Herzliche Grüße,

Larissa Klemme

Liebe Larissa,

das klappt so leider noch nicht. In den Spelldatensätzen (Episodendatensätze) spSchool und spVocTrain sind für jede Person unter Umständen mehrere (auch zeitgleiche) Episoden abgespeichert. Das bedeutet, es kann möglicherweise mehrere Zeilen im Datensatz geben, die während einer Welle (Variable wave) entstanden sind, und ein 1:m (oder m:1 oder 1:1) merge via ID_t und wave funktioniert nicht.
Du kannst dir ja nochmal das Kapitel „4.1.3 Episode or spell data“ im Datenmanual der SC6 anschauen.

Was du also vorher machen müsstest:
Die Einträge/Zeilen/Spells in spSchool und spVocTrain soweit verdichten, dass du nur noch einen Wert (== eine Zeile) pro Welle hast. Hierbei musst du auch bedenken, dass wave in diesen Datensätzen nicht die Gültigkeitsdauer der Episode angibt, sondern schlicht, wann diese Information erhoben wurde. Um genau zu sein, müsstest du also das Interviewdatum aus CohortProfile mit den Episodenzeiten (Start/Ende der Episode) abgleichen, um zu wissen, welche Episoden zur aktuellen Welle gehören.

Die Beispiele zu den beiden Datensätzen im Datenmanual sind leider für diesen Fall nicht hilfreich, du kannst dir aber mal das Beispiel beim Datensatz spChild ansehen. Das vermittelt zumindest eine Idee, wie so eine Aggregation von Information aussehen könnte.

Gutes Gelingen,
Tobias

Lieber Tobias,

vielen Dank für deine Rückmeldung. Ich schaue mal, ob mir das gelingt.
Eine Frage habe ich noch. Wenn ich lediglich den pTarget-Datensatz mit dem Basics-Datensatz mergen möchte, ist das dann folgendermaßen korrekt?

*pTarget laden
use „$ORIGINAL6\SC6_pTarget_D_11-0-0“

  • 1.126 var
  • 107.682 obs
    adoupdate nepstools, update

merge n:1 ID_t using „$ORIGINAL6\SC6_Basics_D_11-0-0.dta“

  • 1.186 var
  • 107.682 obs
    keep if _merge==3
    drop _merge

Vielen Dank im Voraus für die Antwort!

Herzliche Grüße,

Larissa

Hi Larissa,

du kannst das so machen, allerdings hat das dann zwei Implikationen:

a) vervielfältigst du die Zeilen aus Basics n-mal (n==Anzahl der Wellen). Zu jeder Welle in pTarget hast du dann die gleichen Daten aus Basics angespielt. Das heißt, es gibt keine Varianz zwischen den Wellen.

b) Die Informationen in Basics spiegeln den uns letztbekannten Wert wieder (mehr dazu im oben verlinkten Datenmanual). Wenn sich also mit einer neuen Erhebung/neuen Welle etwas ändert, werden die Informationen im Basics-Datensatz aktualisiert. Wenn du diese Info jetzt so anspielst, hast du möglicherweise (wahrscheinlich sogar ziemlich sicher) bei den meisten Personen Daten „aus der Zukunft“ in den Wellen (also zeitlich nicht zu dem Rest der Zeile passend). Ich glaube nicht, dass du das willst?

Welche Informationen interessieren dich denn in Basics, die nicht bereits in pTarget enthalten sind?

Viele Grüße,
Tobias

Hallo Tobias,

danke für die Rückmeldung.
Ich benötige Informationen zu den schulischen und beruflichen Bildungsabschlüssen der befragten Personen. Da ich leider bisher nicht verstanden habe, wie ich die Variable ts11209, Schulabschluss der befragten Personen in „spSchool“ und die Variable ts15219, Ausbildungsabschluss der befragten Personen in „spVocTrain“ fehlerfrei und sinnvoll nutzbar an pTarget anspiele, habe ich nach anderen passenden Variablen in den Datensätzen gesucht.
In ‚Basics‘ sind nützliche Informationen in der Variable „tx28103“ (letzter ISCED 97) zusammengefasst. Kann ich statt des gesamten Datensatzes lediglich die benötigte Variable folgendermaßen anspielen?

use „$ORIGINAL6\SC6_pTarget_D_11-0-0.dta“, clear

merge n:1 ID_t using „$ORIGINAL6\SC6_Basics_D_11-0-0.dta“, keepusing (tx28103) nogen

Vielen Dank für die Unterstützung und viele Grüße,

Larissa

Liebe Larissa,

entschuldige bitte die späte Rückmeldung. Im Prinzip hat sich an der Frage ja nichts geändert, darum gilt meine Antwort von oben: Kannst du machen, hat aber Nebenwirkungen.
Wenn du nur Querschnittsanalysen machst, könnte das so reichen. Bei Analysen im Längsschnitt würde ich aber davon abraten.

Viele Grüße,
Tobias