Stichprobe einschränken

Fragen zu Stata Syntax und Do-Files.

Stichprobe einschränken

Beitragvon Milui » Mo 12. Dez 2011, 20:31

Hallo

Ich bin neu im Forum und hätte eine Frage zur Einschränkung meines Datensatzes.
Als Hintergrundinfo: ich verwende einen Datensatz mit Personen, die über mehrere Jahre hinweg befragt wurden (2001 - 2008).
Ich habe also xPersonen mit jeweils x-Personenjahren (so oft wie die Person in dem Zeitintervall teilgenommen hat).

Ich möchte meinen Datensatz auf jene Leute eingrenzen, die ein bestimmtes Ereignis zwischen 2001 und 2008 erlebt haben.
Variable X=1, wenn das Ereignis stattfand und X=0 wenn es nicht stattfand.
Das Problem ist, das das Ereignis immer nur in einem Jahr stattgefunden haben kann (solche Erlebnisse wie Tod der Mutter).
Bsp: Person 1 hat das Ereignis im Jahr 2004 erlebt. Also ist X=1 nur im Jahr 2004 für Person 1, ansonsten ist X=0 für diese Person.

Verwende ich zur Einschränkung nun die einfache Syntax: keep if x=1 , gehen mir die Personenjahre der Befragten verloren.
Im oberen Beispiel hätte ich somit nur noch das Jahr 2004 für Person 1. Ich will aber alle Personenjahre der Person 1 behalten.
jede Person, die zwischen 2001 und 2008 das Ereignis erlebt hat, soll mitsamt ihrer Personenjahre im Datensatz verbleiben.
Wie mache ich das in Stata?

Mag sein, dass das eine ziemlich rudimentäre Frage ist, aber mir steht gerade irgendwie einer auf der Leitung.
Hoffentlich kann mir jemand weiterhelfen.

Vielen Dank im Voraus
Milui
 
Beiträge: 10
Registriert: Mo 12. Dez 2011, 20:13
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Stichprobe einschränken

Beitragvon daniel » Di 13. Dez 2011, 12:23

Es fehlt noch die Information zum Datensatzformat. Ich gehe davon aus, dass die Daten im long format (eine Person hat mehrere Zeilen) vorliegen, da Du nur von einer Variablen (X1) sprichst. In diesem Fall sollte etwas wie

Code: Alles auswählen
bys <id> (<time>) : egen byte has = total(X1)
keep if has
drop has


funktionieren, wobei <id> die Variabel ist, die die Personen identifiziert, <time> die Variable für die Jahre ist.*


* Die Ordnung nach Jahren ist nicht zwingend nötig. Es geht auch

bys <id> : egen has = total(X1)
Stata is an invented word, not an acronym, and should not appear with all letters capitalized: please write “Stata”, not “STATA”.
daniel
 
Beiträge: 1060
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Stichprobe einschränken

Beitragvon Milui » Di 13. Dez 2011, 13:07

Hallo Daniel.

Erstmal danke für die schnelle Antwort.
Du hast mit deiner Annahme recht: meine Daten sind im Long-Format, also hat jede Person (identifiziert über eine Personen-ID)
mehrere Zeilen und die Spalten sind die erhobenen/ generierten Variablen.

Deinen Lösungsvorschlag werde ich ausprobieren (bw. ich sitze gerade dabei), aber vielleicht könntest du jemand Stata-Unerfahrenen
wie mir kurz erklären, was der Befehl genau macht.
Ich glaube nämlich nicht, dass das funktionieren kann. Meine Variable X ist dichotom kodiert (1=Ereignis, 0 kein Ereignis).
Das Problem ist, dass auch Personen, die das Ereignis in einem Jahr erleben (X=1), in ihren übrigen Jahren auf der Variable eine 0 haben.
So wie ich das sehe, brauche ich einen Indikator, der alle Personen identifiziert, die MINDESTENS EINMAL das Ereignis haben und jene, die
es NIE haben. Ich muss die Gruppen ja unterscheiden können. Erst dann würde deine Lösung doch richtig funktionieren,oder?

Etwas in der Art:
gen indikator=.
replace indikator=1 if X=="mindestensin einem Jahr 1"
replace indikator=0 if X=="niemals 1)
Wobei ich dann wieder vor dem Problem stehe, wie ich den Indikator alle Personenjahre markieren lasse?
Aber wie gesagt, ich bin kein Profi und momentan sehr verwirrt. Ich bin schon froh, dass sich überhaupt jemand mit meinem
Problem beschäftigt...
Milui
 
Beiträge: 10
Registriert: Mo 12. Dez 2011, 20:13
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Stichprobe einschränken

Beitragvon daniel » Di 13. Dez 2011, 13:51

Milui hat geschrieben:vielleicht könntest du jemand Stata-Unerfahrenen
wie mir kurz erklären, was der Befehl genau macht.

Klar.

Du bildest die Variable <has> ,die die Summe der Variablen X1 für jede Person über alle Jahre dieser Person enthält. Die Summe über eine Variable bildest Du mittels -egen-s -total()- Funktion. Mittels -bysort- Prefix bildest Du diese Summe für jede Person.

Hat eine Person in keinem Jahr ein Ereignis, dann ist diese Summe 0. Wenn in irgendeinem Jahr ein Ereignis stattgefunden hat, dann ist die Summe 1. Du behälst dann nur die, die eine 1 haben. Stata unterscheided 0 und alle übrigen Werte. Unter der Annahme, dass nur 0 und 1 in <has> vorkomen, bzw. dass Du nur die Nuller rauswerfen willst, egal was sonst für Werte vorkommen, kann die Zeile

keep if (has == 1)

auch geschrieben werden als

keep if has

Alternativ kannst Du auch schreiben

drop if !(has)

Die Variable <has> ist demnach die Umsetzung Deines <indikator>s.
Stata is an invented word, not an acronym, and should not appear with all letters capitalized: please write “Stata”, not “STATA”.
daniel
 
Beiträge: 1060
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Stichprobe einschränken

Beitragvon Milui » Di 13. Dez 2011, 15:27

Ach so!
Da der Befehl über alle Zeilen läuft (=Personenjahre) hat man eine Summe pro Person über alle Jahre die 1 ist,
wenn das Ereignis erlebt wurde und 0, wenn man es nicht erlebt hat.
Also kann ich anschließend einmal nach dem Ereignis auswählen (=Experimentalgruppe) und andererseits
auch die Kontrollgruppe (Summe von has=0) näher definieren.

Meine Kontrollgruppe möchte ich nämlich noch anhand verschiedener Kriterien (=Verteilungen auf bestimmten Variablen
(Alter, Geschlecht, Bildung) in der Experimentalgruppe) eingrenzen, sodass ich eine vergleichbare Gruppe bekomme.
Dabei war es eben der erste Schritt, die beiden Gruppen auseinanderzuwurschteln :)

Oh man, das war wirklich nicht so schwer. Hoffentlich klappt jetzt auch alles. Vielen lieben Dank für die Erleuchtung!
Manchmal sieht man echt den Wald vor lauter Bäumen nicht mehr...

Beste Grüße
-Milui
Milui
 
Beiträge: 10
Registriert: Mo 12. Dez 2011, 20:13
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post


Zurück zu Stata Syntax

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron