Variablen nach einem bestimmten Ereginis löschen

Fragen zu Stata Syntax und Do-Files.

Variablen nach einem bestimmten Ereginis löschen

Beitragvon samf » Sa 24. Mai 2014, 14:32

Hallo zusammen,

ich bin ganz neu in der Stata Programmierung und brauche einmal Hilfe.

Ich habe (vereinfacht) , nachdem ich über egen Gruppen nummeriert habe folgenden Datensatz:

Gruppe | Fehler (Dummy=1)
1 1
1 0
1 0
2 0
2 1
2 0
3 0
3 0
3 0
.
.

usw.

ich möchte nun, dass, wenn ein Fehler passiert ist, nur die Beobachtung mit dem Fehler über bleibt und alle anderen Beobachtungen der Gruppe gelöscht werden. (bsp nur zeile 1 für gruppe 1 bleibt, rest gelöscht). Sofern kein Fehler geschehen ist (wie in Gruppe 3) sollen alle Beobachtungen (mit Fehler = 0) weiterhin bestehen bleiben.

Jedoch komme ich bisher mit der if Konditionierung in diesem Fall nicht so recht voran :( Vllt. könnte mir wer helfen?

Viele Grüße
Sam
samf
 
Beiträge: 5
Registriert: Sa 24. Mai 2014, 14:13
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Variablen nach einem bestimmten Ereginis löschen

Beitragvon daniel » Mo 26. Mai 2014, 12:09

Kann immer nur maximal ein Fehler pro Gruppe auftreten?

Code: Alles auswählen
bys Gruppe : g sum = sum(Fehler)
bys Gruppe : replace sum = sum[_N]
keep if Fehler | !(sum)
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: Variablen nach einem bestimmten Ereginis löschen

Beitragvon samf » Mo 26. Mai 2014, 13:15

Vielen Dank schonmal, das hat super geklappt :)

Ich habe meine Daten mal durchgeschaut, leider gibt es auch wenige Fälle, wo pro Gruppe auch mehrere Fehler auftauchen können...
Die Datenbasis is aber noch nicht soweit implementiert, dass ich das grade auf den Fall anwenden kann, glaube bin erst morgen soweit.

Wie muss der Code denn verändert werden, wenn das mit einbezogen werden soll?

Viele Grüße
Sam
samf
 
Beiträge: 5
Registriert: Sa 24. Mai 2014, 14:13
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Variablen nach einem bestimmten Ereginis löschen

Beitragvon daniel » Mo 26. Mai 2014, 14:02

Wie muss der Code denn verändert werden, wenn das mit einbezogen werden soll?


Kann ich nicht sage, ohne zu wissen, was Du in einem solchen Fall tun willst. Wenn Du alle Fehler nehalten willst, musst Du gar nichts ändern. Wenn Du nur einen der beiden (oder mehreren) behalten willst, musst Du eine klare Regel haben, welcher das sein soll.
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: Variablen nach einem bestimmten Ereginis löschen

Beitragvon samf » Di 3. Jun 2014, 18:14

Vielen vielen Dank schonmal bis hier hin!
Bei der weiteren Bearbeitung hat sich jetzt folgendes Problem noch ergeben:

Eine Gruppe ist immer bestehend aus 2 Personen, Person 1 und 2, jeweils per Kenn-Nummer gekennzeichnet.
Ich muss nun erreichen, dass eine Person, die die Eigenschaft Dummy=1 besitzt, nur einmal im Bereich des Dummy=1 auftaucht. Sofern dieser mehrere Dummies=1 hat, soll die erste Beobachtung gehalten werden.

Das ganze habe ich bisher mit duplicates probiert, das Problem ist jedoch, dass auch folgende Teamkombinationen möglich sind:
Alle dummy=1:

Person1 Person 2
A B
A C ->sollte gelöscht werden, da A in 1 / Person1auftaucht
D E
F B -> sollte gelöscht werden, da B in 1 / Person 2 auftaucht
C I -> sollte gelöscht werden, da C in 2 / Person 2 auftaucht

usw.

dh. eine Person A kann an Stelle von Person 1 oder Person 2 im Datensatz auftauchen, jedoch möchte ich erreichen, dass er, sobald er einmal aufgetaucht ist (egal ob in A oder B), nicht weiter auftaucht. Mit duplicates konnte ich bisher immer nur in der jeweiligen Variable die Duplikate löschen, jedoch hab ich es noch nicht geschafft, die selbe Person in einer anderen Variable adressieren zu können.

Weiß vielleicht jemand Rat?
Viele Grüße
Sam
samf
 
Beiträge: 5
Registriert: Sa 24. Mai 2014, 14:13
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Variablen nach einem bestimmten Ereginis löschen

Beitragvon daniel » Di 3. Jun 2014, 22:59

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: Variablen nach einem bestimmten Ereginis löschen

Beitragvon samf » Di 3. Jun 2014, 23:56

ich versuche es mal besser darzustellen:

Code: Alles auswählen
inp dummy id1 id2
1 1 2
1 13 4
1 5 16
1 7 5
1 8 1
end


Hier sind jetzt nur Dummy=1 im Spiel, ich möchte für alle Dummy=1 erwirken, dass die id nur einmalig auftaucht (dabei egal ob an Position id1 oder id2), beispielsweise taucht die 1 in id1 in der ersten Beobachtung zuerst auf , kommt anschließend in Beobachtung 5 nochmal in id2 vor. Genau das möchte ich vermeiden! (Das selbe mit Nr. 5 in id1 Beobachtung 3 und Nr.5 id4 Beobachtung 4).

Wichtig ist noch, dass die ids nicht von 1-N durchgängig sind, also keine gleiche Nummerierung in beiden IDs gewährleistet ist (dh. eine Person kann auch nur in der Spalte id1 auftauchen und nicht in id2)

Ich hoffe, das hilft, sonst werd ich mich bemühen, dass noch genauer darzustellen!

Vielen Dank und viele Grüße
Sam
samf
 
Beiträge: 5
Registriert: Sa 24. Mai 2014, 14:13
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Variablen nach einem bestimmten Ereginis löschen

Beitragvon daniel » Mi 4. Jun 2014, 10:15

Code: Alles auswählen
// your example
clear
inp dummy id1 id2
1 1 2
1 13 4
1 5 16
1 7 5
1 8 1
end

// look at the data
l

// proposed solution
g n = _n

reshape long id ,i(n)

bys id (_j) : g todrop = (_n > 1)

reshape wide id todrop ,i(n) j(_j)

drop if (todrop1 | todrop2)

drop todrop* n

l


Der gesamte Datensatz sollte zuvor in zwei Teildatensätze gesplittet, und später wieder zusammengesetzt werden. Etwa

Code: Alles auswählen
preserve
drop if (Dummy == 1)
sa all_zeros.dta ,replace
restore
keep if (Dummy == 1)
<insert code above here>
ap using all_zeros.dta
erase all_zeros.dta // <- this file does not go into trash but is deleted completely !


Viellieicht müssen im reduzierten Datensatz auch noch einige Variablen entfernt werden. Die kannst Du mittels -merge- wieder anspielen.
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: Variablen nach einem bestimmten Ereginis löschen

Beitragvon samf » Do 5. Jun 2014, 14:04

Vielen Dank bis hier hin!
Ich habe am Code nur eine Kleinigkeit geändert, da er nicht immer die erste Beobachtung behalten hat:
Code: Alles auswählen
bys ap_id (n): g todrop2 = (_n>1)


Wenn ich vor dem Doppelpunkt (_j) durch (n) ersetze, klappt es!
Vielen Dank1

Viele Grüße
Sam
samf
 
Beiträge: 5
Registriert: Sa 24. Mai 2014, 14: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 7 Gäste

cron