2016-05-19 6 views
0

Ich denke, dass meine Frage ist ähnlich zu diesem: Drop observations in panel data using Stata aber ich mache immer noch etwas falsch und es funktioniert nicht ganz für mich.Drop-Abschnitt der Panel-Daten in Stata

I haben Paneldaten mit den folgenden Variablen: Year - Month - Subject - Trial - Attempt - Reward

Jeder Proband hat 4 Versuche (oder Schuss), mit 5 Versuche pro Runde. Die Belohnung ändert sich durch Versuch und Runde, der 5. (letzte) Versuch ist IMMER = 2. Für jedes Thema wurde einer der 4 Versuche zufällig ausgewählt, um alle 5 Versuche reward = 2 zu haben (normalerweise haben die Versuche 1-4 reward = 1). Ich muss diese "Bonusversuche" löschen.

Ich weiß, dass ich by (http://www.stata.com/manuals13/dby.pdf) verwenden muss, aber ich scheine es falsch zu tun. Wenn ich dies tun:

by trial: drop if attempt == 2 & reward == 2 

dann bekomme ich

nicht sortiert.

Wenn ich dies tun:

by trial, sort: drop if attempt == 2 & reward == 2 

es fällt 1 Beobachtung, wenn ich es brauche in dieser Studie alle 5 Beobachtungen fallen zu lassen.

Daten Beispiel:

* Example generated by -dataex-. To install: ssc install dataex 
clear 
input int Year str3 Month byte(Subject Trial Attempt Reward) str1 Todrop 
2016 "Feb" 1 1 1 1 "" 
2016 "Feb" 1 1 2 1 "" 
2016 "Feb" 1 1 3 1 "" 
2016 "Feb" 1 1 4 1 "" 
2016 "Feb" 1 1 5 2 "" 
2016 "Feb" 1 2 1 1 "" 
2016 "Feb" 1 2 2 1 "" 
2016 "Feb" 1 2 3 1 "" 
2016 "Feb" 1 2 4 1 "" 
2016 "Feb" 1 2 5 2 "" 
2016 "Feb" 1 3 1 2 "*" 
2016 "Feb" 1 3 2 2 "*" 
2016 "Feb" 1 3 3 2 "*" 
2016 "Feb" 1 3 4 2 "*" 
2016 "Feb" 1 3 5 2 "*" 
2016 "Feb" 2 1 1 1 "" 
2016 "Feb" 2 1 2 1 "" 
2016 "Feb" 2 1 3 1 "" 
2016 "Feb" 2 1 4 1 "" 
2016 "Feb" 2 1 5 2 "" 
2016 "Feb" 2 2 1 2 "*" 
2016 "Feb" 2 2 2 2 "*" 
2016 "Feb" 2 2 3 2 "*" 
2016 "Feb" 2 2 4 2 "*" 
2016 "Feb" 2 2 5 2 "*" 
2016 "Feb" 2 3 1 1 "" 
2016 "Feb" 2 3 2 1 "" 
2016 "Feb" 2 3 3 1 "" 
2016 "Feb" 2 3 4 1 "" 
2016 "Feb" 2 3 5 2 "" 
end 

Oben ist ein Beispiel für zwei Fächer. Was ich gerne tun könnte, ist, die gesamte Studie 3 für Thema 1 und alle für Probe 2 für Thema 2 (die markierten Studien) fallen zu lassen, aber nicht die anderen (nicht markierte Studien) fallen zu lassen. Das heißt, die Variable Todrop ist * für Beobachtungen drop ped und leer andernfalls.

+0

ich einige Änderungen vorgeschlagen haben, zu einem großen Teil, die Formatierung der Frage zu verbessern. Ohne Beispieldaten und ein reproduzierbares Beispiel kann es jedoch schwierig sein, eine Antwort zu erhalten. Wenn es hilft, schau mal hier: http://stackoverflow.com/help/mcve – ander2ed

+0

hey amie bitte schau dir meine Antwort an. Wenn das funktioniert, bitte akzeptieren. danke –

+0

Ich habe Ihre Daten Beispiel bearbeitet, so dass es direkt in Stata als 'Eingabe' Code kopiert und eingefügt werden kann. Siehe "DataEx" (SSC) für die Mittel, dies zu tun. –

Antwort

1

Unter der Annahme, Daten gelesen werden, in wie in Ihrem Beispiel können Sie erkennen, welche Beobachtungen zu drop von

bysort Year Month Subject Trial (Reward) : gen todrop = Reward[1] == 2 & Reward[5] == 2 

Die Prinzipien sind:

  1. Definieren Sie Gruppen durch Kreuzkombinationen o f Variablen. Wie Sie sagen, gibt by: hier einen Rahmen.

  2. Jeder Wert von Reward muss 2 in Gruppen sein, um drop ped zu sein. Wenn ja, dann ist es notwendig und hinreichend, daß nach sort ing auf Reward innerhalb von Gruppen, wobei der erste und der letzte Wert sein beide 2.

dass todrop Überprüfen Sie, wie oben definiert ist 1, wenn und nur wenn Todrop* ist. (Siehe beispielsweise eine tabulate *drop, missing).

einmal zufrieden,

drop if todrop 

Viel mehr bei this Stata FAQ,

+0

was kann ich tun, wenn der Master-Nick eine Antwort gibt .... ;-) –

+0

Vielen Dank für Ihre Hilfe. – Amie

+0

Die Annahme einer Antwort würde Ihren Ruf (und meiner, ich sollte zugeben)! –

0
gen flag_temp=1 if attempt == 2 & reward == 2 
bysort trial: egen flag=min(flag_temp) 

drop if flag==1 

Boom

+0

Ok, das war knapp, aber die "Bonusrunde" ist zufällig und nicht für alle Teilnehmer gleich. Für Teilnehmer A und C war die Bonusrunde also Test 2, aber für Teilnehmer B war die Bonusrunde Test 3. Ich möchte also nur Test 2 für A und C fallen lassen und nur Test 3 für B. Dieser Code löscht beide Tests 2 und Versuch 3 für alle drei Teilnehmer. – Amie

+0

Amie: Bitte geben Sie ein Datenbeispiel. Dir ist das alles klar, aber die Leute zu bitten, alle Regeln ohne Beispiel im Kopf zu halten, ist schwieriger. Unter http://stackoverflow.com/help/mcve erfahren Sie, wie Sie eine gute Frage stellen können. –