Sample mit keep Befehl reduzieren

Deskriptive Statistiken mit Stata.

Sample mit keep Befehl reduzieren

Beitragvon Lupi » Sa 15. Feb 2014, 01:28

Hallo zusammen,

ich arbeite gerade an der Deskriptiven Statistik einer Studie. Hierzu habe ich mein Sample auf alle relevanten Variablen reduziert und alle fehlenden Werte herausgelöscht.
Leider ist dabei ein kleines Problem aufgetaucht, das ich nicht zu lösen vermag.

In meiner Studie geht es um den Einfluss einer Intervention auf gewisse Variablen. Hierzu habe ich eine Dummyvariable time, die zwischen der Zeit vor und nach der Intervention unterscheidet.

Ich habe zunächst folgenden Befehl ausgeführt:
keep if time ~=. & m_trained ~=. & l_trained ~=. & w4 ~=. & w4_1 ~=. & ja ~=. & jb ~=. & age ~=.

Da manche Variablen jedoch zeitunabhängig sind (wie zum Beispiel das Alter), sind diese nur für die Zeit vor der Intervention definiert. Mit diesem Befehl hat es mir somit alle Beobachtungen für die Zeit nach der Intervention herausgelöscht.

Ich habe es daraufhin mit folgendem Befehl versucht:
keep if time | m_trained ~=. & l_trained ~=. & w4 ~=. & w4_1 ~=. & ja ~=. & jb ~=. & age ~=.

Allerdings habe ich aufgrund der Beschaffenheit des Datensatzes nun für die Zeit nach der Intervention mehr Beobachtungen als für die Zeit vor der Intervention, was somit meine spätere Analyse verfälscht.

Wie kann ich den Befehl abändern, um quasi das Resultat meines ersten Versuchs zu bekommen, nur ohne alle Beobachtungen für die Zeit nach der Intervention zu verlieren?

Freundliche Grüße und vielen Dank im Voraus
Lupi
Lupi
 
Beiträge: 11
Registriert: Do 13. Feb 2014, 01:34
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Sample mit keep Befehl reduzieren

Beitragvon daniel » Sa 15. Feb 2014, 14:11

keep if time | m_trained ~=. & ...


ist garantiert nicht, was Du willst. Es tut auch nicht das, was Du vemutest. Für Stata bedeutet dieses statement "behalte Fälle für die time nicht den Wert 0 hat (aber alle anderen inklusive fehelnde Werte)". Das liegt daran, dass vor dem oder (|) für Stata eine expression (ein Ausdruck) steht, die eetweder 0 (falsch) oder nicht 0 (wahr) ist. Für jeden Fall, für den die Variable time nicht 0 ist, ist dieser Teil der Bedignung erfüllt, und damit ist der Teil nach dem oder irrelevant. Du wolltest

Code: Alles auswählen
keep if time != . | m_trained != . ...


Dafür git es die Funktion -missing()- oder kurz -mi()-. Dein Statment wäre also als

Code: Alles auswählen
keep if !mi(time, m_trained, ...)


einfacher auszudrücken.

Der gesamte Ansatz ist m.E. umständlich, da alle Befehle wie -tabulate-, -summarize-, -mean-, -regress- etc. fehlende Werte automatisch aus den Berechnungen ausschließen. Es wäre gar nicht anders möglich. Die Definition numerischer fehlender Werte (häufig 99, -99 oder ähnliche) als fehlend (z.B. mittels -mvdecode-, -recode-, -replace-, etc.) ist völlig ausreichend.

Ich vermute weiterhin, dass Du Deine Daten zunächst in eine anderes Format bringen musst, um die zeitliche Abhängigkeit korrekt berücksichtigen zu können.

Am besten ist Dir vermutlich in einer face-to-face Beratung bei einem lokalen Ansprechparter geholfen. Solltst Du auf das Forum angewiesen sein, bitte replizierbare Beispeile erstellen und ausführlich, so exakt wie möglch beschreiben, was genau Du willst. Hilfe versprechen kann ich (und vermutlich andere) allerdings nicht, da die investierte Zeit ins Forum unentgeldlich ist.

Ich vermute,
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: Sample mit keep Befehl reduzieren

Beitragvon Lupi » Sa 15. Feb 2014, 15:16

Hallo daniel,

ich möchte das Sample reduzieren, um wirklich die gleichen Individuen in allen Kategorien vergleichen zu können. Wenn ich diesen Schritt nicht gehe, vergleiche ich ja zum Beispiel für das Alter 700 Individuen miteinander und für das Geschlecht nur 680. Ich möchte jedoch ein Sample zusammenstellen, das ich komplett miteinander vergleichen kann und bei dem alle Werte vorhanden sind. Das einzige Problem ist dabei wie gesagt die Dummyvariable time.

In meinem ursprünglichen Datensatz gibt es 770 Beobachtungen. Nach der Bereinigung sollten 672 übrig bleiben.

Bei dieser Alternative:
keep if time | m_trained ~=. & l_trained ~=. & w4 ~=. & w4_1 ~=. & ja ~=. & jb ~=. & age ~=.

habe ich zumindest für time == 0 die richtigen Anzahl (672) an Beobachtungen,
allerdings sind für time == 1 immer noch alle 770 Beobachtungen vorhanden. (wenn ich das richtig verstehe, ist es das Ergebnis, welches du mir erklärt hast.)

gibt es denn die Möglichkeit auf diesem Ergebnis aufzubauen und mit einem Befehl (zum Beispiel: drop) die Beobachtungen für time == 1 auf die Beobachtungen für time == 0 einzuschränken?

Ist diese Beschreibung ausreichend?

Für die unentgeltlich investierte Zeit danke ich dir natürlich von Herzen!

Freundliche Grüße
Lupi
Lupi
 
Beiträge: 11
Registriert: Do 13. Feb 2014, 01:34
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Sample mit keep Befehl reduzieren

Beitragvon daniel » Sa 15. Feb 2014, 16:28

Ich weiß nicht, wie Dein Datensatz aufgebaut ist. Wenn es meherre Zeitpunkte gibt, müsste für die meisten Analysen jede Beobachtungseinheit in mehreren Zeilen (nämlich eine pro Zeitpunkt) erfasst sein.

Verusch mal

Code: Alles auswählen
regress <varlist>
keep if e(sample)


wobei <varlist> durch eine Liste aller Variablen, die Du verwenden möchtest ersetzt wird. Wie bereits erwähnt, kümmert sich -regress- automatisch um fehlende Werte und speichert eine "Systemvariable" e(sample), die den Wert 1 für alle Beobachtungen enthält, die in der Regression verwendet wurden. Du bist nicht inhaltlich am Ergebnis der Regression interesiert, aber kannst so Dein sample einschränken. Schau auch mal unter -help mark- nach.

Für die unentgeltlich investierte Zeit danke ich dir natürlich von Herzen!


Das war eigentlich nicht so gemeint, dass ich gerne ein explizites Danke erwarte, sondern, dass Du Dich besser nicht ausschließlich auf diese Hilfe verlässt.
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: Sample mit keep Befehl reduzieren

Beitragvon Lupi » Sa 15. Feb 2014, 17:01

Hallo daniel,

das hat leider auch nicht funktioniert, er hat mir nun für time == 1 alle Beobachtungen gelöscht.
Ich glaube es ist das gleiche Ergebnis wie für keep if !mi (varlist)

Ich denke, ich habe einen möglichen Ansatz entdeckt, kenne aber nicht den nötigen Befehl um ihn durchzuführen.

Und zwar gibt es eine Identifizierungsvariable für jedes Individuum des Datensatzes. Diese ist für jedes Individuum doppelt vorhanden (einmal für time == 0 und einmal für time == 1). Über tab Identifizierungsvariable, kann ich nun sehen, bei welchen Individuen nur noch ein Wert vorhanden. Dies entspricht den Individuen, die ich aus meinem Sample kicken will. Das sieht dann ungefähr so aus:

id freq pct cum.pct
11225 | 2 0.14 4.30
11226 | 2 0.14 4.44
11227 | 2 0.14 4.58
11233 | 1 0.07 4.65
11237 | 1 0.07 4.72
11239 | 1 0.07 4.79
11414 | 2 0.14 4.92
11415 | 2 0.14 5.06

Ich bräuchte nun also einen Befehl, der alle Beobachtungen rauskickt, bei denen freq = 1 ist.
Gibt es einen solchen Befehl (oder etwas vergleichbares)?

Freundliche Grüße
Lupi
Lupi
 
Beiträge: 11
Registriert: Do 13. Feb 2014, 01:34
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Sample mit keep Befehl reduzieren

Beitragvon daniel » Sa 15. Feb 2014, 17:42

Code: Alles auswählen
bys <id> : drop if (_N < 2)


<id> durch den Namen der Identifikatinosvariable ersetzen.
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: Sample mit keep Befehl reduzieren

Beitragvon Lupi » Sa 15. Feb 2014, 18:25

wunderbar, das hat funktioniert!

Vielen Dank!!
Lupi
 
Beiträge: 11
Registriert: Do 13. Feb 2014, 01:34
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post


Zurück zu Deskriptive Statistik

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron