2016-11-12 3 views
0

Betrachten Sie die fiktiven Daten zur Veranschaulichung meines Problems, das in Wirklichkeit Tausende von Zeilen enthält. an A, B, C, D, EErstellen einer ID basierend auf Faktor und Füllen mit Stata

Figur 1

enter image description here

Jedes Individuum wird durch Werte charakterisiert. In Abbildung 1 zeige ich 3 Personen, für die einige Merkmale fehlen. Haben Sie eine Idee, wie ich die folgende vollständige Tabelle erhalten kann (Abbildung 2)?

Figur 2

enter image description here

Mit der ID in 1 I den carryforward Befehl könnte in den Werten der Befüllung verwendet. Aber da jede Person eine andere Anzahl von Zeilen hat, weiß ich nicht, wie ich die ID erstellen soll.

Bearbeiten: Alle einzelnen teilen das Merkmal "A".

Bearbeiten: die bestehende Reihenfolge der Beobachtungen ist informativ.

+0

Dank @timat. Ich dachte an "fillin" und ich könnte etwas verpasst haben. Aber zum 'fillin' müssen Sie mehr als eine Variable angeben. Um genauer zu sein, möchte ich keine Beobachtungen mit fehlenden Werten für alle Kombinationen von Char und Werten erstellen. Ich möchte nur die fehlenden Merkmale hinzufügen, um 5 Zeilen pro ID zu erhalten. – emeryville

+0

Ich sehe hier keine genaue Spezifikation, was genau wir können und was nicht. Es scheint, dass die bestehende Reihenfolge der Beobachtungen ("Zeilen" ist kein Standard-Stata-Begriff) informativ ist, aber es gibt hier keinen Hinweis auf eine Bezeichnervariable. –

+0

Danke Nick für deinen Kommentar. Das ist richtig, die bestehende Reihenfolge der Beobachtungen ist informativ. Eine naive Frage: Gibt es einen Grund, warum Stata "Beobachtung" statt "Reihe" benutzt? Oder warum nicht beides? – emeryville

Antwort

2

Um die Änderung der ID zu erkennen, besteht die Idee darin, zu vergleichen, ob der Präzedenzwert von char in jeder Zeile> = = ist.

Dies funktioniert nur, wenn Ihre Daten bestellt werden, aber es scheint zwingend in Ihren Daten.

gen id= 1 if (char[_n-1] >= char[_n]) | _n ==1 
replace id = sum(id) if id==1 
replace id = id[_n-1] if missing(id) 
fillin id char 
drop _fillin 

Wenn eine Person als nur die Merkmale A und C und eine andere Person als nur die Eigenschaften D und E, das wird nicht funktionieren, aber es scheint unmöglich, mit Ihren Daten zu erfassen.

+0

Danke @timat! Das ist eine sehr gute und effiziente Lösung. Lassen Sie mich hinzufügen, dass es auch gut für mein allgemeines Problem funktioniert, weil alle Individuen mindestens das Merkmal A teilen. – emeryville

+1

Siehe auch Häufig gestellte Fragen zur Datenverwaltung wie http://www.stata.com/support/faqs/data-management/groups -durch-erstes-Auftreten / –

Verwandte Themen