Beobachtungen Vergleichen

Fragen zu Stata Syntax und Do-Files.

Beobachtungen Vergleichen

Beitragvon Patrick Supertramp » So 28. Okt 2012, 10:00

Hallo Zusammen!
Ich habe STATA jetzt seit paar Wochen und immer mal wieder ein paar Herausforderungen, die ich immer irgendwie per Internet und help-Funktion meistern konnte, aber diesmal scheint es etwas schwieriger zu für mich zu werden. Ich hoffe mal, dass ich hier richtig bin mit meiner Frage!?

Ich habe einen Datensatz, der wie folgt aufgebaut ist:

ID---A1---B1---A2---B2---...---Ai---Bi
1-----x-----x
2-----y----- -----y
3-----x-----y
4-----y-----x-----z-----y

Zu Erklärung, ich habe ein ID, wekche nur einmal vergeben wird. Dann habe ich Ai und Bi (bis jeweils 127). Es sollen nun zwei Dinge verglichen werden:
1. Hat ein Datensatz irgendein A und irgendein B, die Antwort wäre bei 1;3;4=Ja und bei 2=Nein --> Hieraus soll dann eine neue Variable generiert werden bin 1 oder 0.
2. Nach dem ich die neue Variable habe, möchte ich alle Datensätze, die nicht zuvor "Ja" hatten, rausschmeißen, dass ist ja kein Problem. Als nächstes sollen die Beobachtungen verglichen werden. Wir haben jetzt nur noch Datensatz 1;3;4. Jetzt soll mir in einer neuen Variable wieder mit 1 und 0 angezeigt werden, ob in Ai und Bi nicht das gleiche steht. Es soll praktisch A1 mit allen Bi verglichen werden und dann A2 mit allen Bi. Somit würde nur bei Datensatz 3 und 4 ein "Ja" kommen. Hierbei spielt es keine Rolle, wie die Unterscheidung ist, sprich Datensatz 3 und 4 kommen zum selben Ergebnis.

Ich hoffe, dass ich mich einigermaßen Verständlich ausgedrückt habe und mir hier weitergeholfen werden kann!?

Liebe Grüße
PS
Zuletzt geändert von Patrick Supertramp am So 28. Okt 2012, 10:06, insgesamt 3-mal geändert.
Patrick Supertramp
 
Beiträge: 7
Registriert: So 28. Okt 2012, 09:40
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Beobachtungen Vergleichen

Beitragvon Patrick Supertramp » So 28. Okt 2012, 10:01

Hier sah die Formatierung noch etwas anders aus...
Kommt rüber, wie ich es meine?
Patrick Supertramp
 
Beiträge: 7
Registriert: So 28. Okt 2012, 09:40
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Beobachtungen Vergleichen

Beitragvon daniel » So 28. Okt 2012, 13:26

Konkret kann ich noch nichts sagen.

Für den ersten Schritt scheint mir spontan -egen- mit -anycount()- oder -anymatch()- Funktion geeignet. Noch einfacher könnte es mit -marksample- im langen Format funktionieren.

Bei Schritt 2 muss vermutlich entweder ein (genesteter) loop (-foreach-) her. Vielleicht ist -reshape-n der Daten ins lange Format hier aber auch gescheiter.

Da wäre zuvor zu klären, was mit

Jetzt soll mir in einer neuen Variable wieder mit 1 und 0 angezeigt werden, ob in Ai und Bi nicht das gleiche steht.


genau gemeint ist. Wenn bsp. A1 und B1 nicht übereinstimmen, A1 aber mit B42 (oder A42 mit B23) übereinstimmen, welchen Wert bekommt die Indikatorvariable?

Zudem wäre interessant inwieweit das Beispiel realitätsnah ist. Sind das z.B. tatsächlich alles string Variablen, mit dem Inhalt (klein) y, (klein) z, etc, oder verbergen sich nummerische Werte hinter den Buchstaben? Wenn ja, sind das Ganzzahlige Werte, oder nicht?
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: Beobachtungen Vergleichen

Beitragvon Patrick Supertramp » So 28. Okt 2012, 13:52

Erstmal danke für die schnelle Antwort.

Werde es gleich mal mit anycount und anymatch probieren.

Was den zweiten Schritt angeht, "Wenn bsp. A1 und B1 nicht übereinstimmen, A1 aber mit B42 (oder A42 mit B23) übereinstimmen, welchen Wert bekommt die Indikatorvariable?" sobald eins ungleich ist, gilt das für den gesamten Datensatz, dann könnte Stata auch aufhören zu vergleichen, um rechenzeit zu sparen, falls das geht. Achso, wichtig ist noch, es sind nicht immer alle Zellen gefüllt, ich hoffe das macht keinen Unterschied!? Die Beobachtungen sind alles dreistellige Zahlen, wobei es glaube ich nicht als Zahl definiert ist, denn ich muss immer die Zahlen in "" setzten, also "123". Das muss auch so bleiben.
Realitätsnah ist das Ganze schon. Ich bin gerade dabei ein erstes Paper für mein PhD zuschreiben. Besser gesagt, ich bin ganz am Anfang und lerne gerade mit Stata zu arbeiten ;-)
Zuletzt geändert von Patrick Supertramp am So 28. Okt 2012, 14:37, insgesamt 2-mal geändert.
Patrick Supertramp
 
Beiträge: 7
Registriert: So 28. Okt 2012, 09:40
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Beobachtungen Vergleichen

Beitragvon daniel » So 28. Okt 2012, 14:36

Da habe ich mich missverständlich ausgedrückt. So war das "realitätsnah" gar nicht gemeint -- es ging tatsächlich nur um die From (das Format) der Daten.

-anycount()- und -anymatch()- sind auch zu kompliziert glaube ich. Du willst alle Beobachtungen (vgl. Kommentar unten) behalten, die mindestens einen gültigen A und einen B Wert haben?

Angenommen die fehlenden Werte sind als leere Stellen (i.e. "") im Datensatz, versuch es mit

Code: Alles auswählen
egen nonmiss_a = rownonmiss(a*) ,s
egen nonmiss_b = rownonmiss(b*) ,s
keep if (nonmiss_a + nonmiss_b > 1)
drop nonmiss*



Kleinigkeit am Rande: was Du da hast ist ein Datenstaz. Was Du als Datensatz bezeichnest ist eine Beobachtung (Reihe) im Datensatz.
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: Beobachtungen Vergleichen

Beitragvon daniel » So 28. Okt 2012, 14:43

sobald eins ungleich ist, gilt das für den gesamten Datensatz


Was bedeutet das für fehlende Werte? Nimm das Paar A1 = "", B42 = "123". Die sind nicht gleich. Soll das auch als ungleich gewertet werden, oder müssen sich tatsächlich zwei nummerische Werte unterscheiden?
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: Beobachtungen Vergleichen

Beitragvon Patrick Supertramp » So 28. Okt 2012, 14:48

Die nummerischen Werte müssen sich unterscheiden.
Patrick Supertramp
 
Beiträge: 7
Registriert: So 28. Okt 2012, 09:40
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Beobachtungen Vergleichen

Beitragvon Patrick Supertramp » So 28. Okt 2012, 14:50

Wenn "" dort steht, sollte es keinen Einfluss haben, sprich es kann übersprungen werden.
Patrick Supertramp
 
Beiträge: 7
Registriert: So 28. Okt 2012, 09:40
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Beobachtungen Vergleichen

Beitragvon Patrick Supertramp » So 28. Okt 2012, 15:03

So, ich habe jetzt mal deinen Befehl übernommen, funktioniert perfekt! Danke! Somit ist Teil 1 erfüllt :-)
Jetzt kommt wohl der schwierige Teil des Ganzen, Teil 2. Hast du dafür auch schon so schnell eine Lösung?

Noch eine kleine Frage, wie nennt man die einzelnen Daten in der Zelle? Ausprägungen oder Variablen?
Patrick Supertramp
 
Beiträge: 7
Registriert: So 28. Okt 2012, 09:40
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Beobachtungen Vergleichen

Beitragvon daniel » So 28. Okt 2012, 17:29

Zunächst zur kurzen Frage: ja kann man so sagen. Ganz genau: Ausprägung der Variablen k im Fall i.

Bei Schritt 2 ist mit aufgefallen, dass es doch eigentlich "nur" darum geht, dass nich alle Ausprägungen aller Variablen pro Fall gleich sein dürfen? Ist (pro Zeile) eine Ausprägung ungleich der Ausprägung in der ersten Variablen (A1), dann ist die Bedingung bereits erfüllt. Denn selbst wenn alle weiteren B Variablen den gleichen Wert haben, wie A1, so gilt das schon nicht für die eine Variable (A oder B), die nicht den gleichen Wert annimmt, wie A1.

Hier ist eine (weder elegante, noch robust gegen Benutzerfehler) Variante zur Lösung
Code: Alles auswählen
vers 12.1
m :
void myeqdrop(string scalar fst, lst, indx)
{
   string matrix x, sx
   real colvector dropit
   
   x = st_sdata(., (st_varindex(fst)..st_varindex(lst)))
   dropit = J(rows(x), 1, .)
   for (r = 1; r <= rows(x); ++r) {
      sx = select(x[r, .], x[r, .] :!= "")
      dropit[r, 1] = allof(sx[1, .], sx[1, 1])
   }
   st_addvar("byte", indx)
   st_store(., indx, dropit)
}
end


Kopier den code in ein do-file und lass es einmal durchlaufen. Danach rufst Du die Mata Funktion wie folgt auf:

Code: Alles auswählen
m : myeqdrop("<firstvar>", "<lastvar>", "<newvar>")


wobei alle Elemente in < und > ersetzt werden. Dabei ist <firstvar> der Name der ersten Variable (vermutlich A1), <lastvar> der Name der letzten Variable (vermutlich B127) und <newvar> der Name der (noch nicht exisiterenden!) Indikatorvariable. Die nimmt den Wert 1 an, falls der Fall rausgeschmissen werden soll, 0 sonst.

Nach dem Aufruf der Mata Funktion kannst Du den Indikator prüfen und, falls alles in Ordnung ist, die unerwünschten Fälle mittels

Code: Alles auswählen
drop if <newvar>


rausschmeißen.
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

Nächste

Zurück zu Stata Syntax

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

cron