Wie kann ich Rang Beobachtungen innerhalb der Gruppen in Stata?
Habe ich einige Daten in Stata, die Aussehen wie die ersten zwei Spalten von:
group_id var_to_rank desired_rank
____________________________________
1 10 1
1 20 2
1 30 3
1 40 4
2 10 1
2 20 2
2 20 2
2 30 3
Ich würde gerne eine Rang von jeder Beobachtung innerhalb der Gruppe (group_id) nach einer Variablen (var_to_rank). In der Regel wird für diesen Zweck verwendet habe ich:
gen id = _n
Aber einige meiner Beobachtungen (group_id = 2, in meinem kleinen Beispiel) die gleichen Werte haben ranking-variable und dieser Ansatz funktioniert nicht.
Habe ich auch schon versucht mit:
egen rank
Befehl mit verschiedenen Optionen, aber nicht meinen Rang-Variablen zu schauen, wie desired_rank.
Konnte Sie mir eine Lösung zu diesem problem?
InformationsquelleAutor radek | 2011-05-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde sagen, diese Frage stellte der falsche Weg-Runde für das beste Verständnis. Das Ziel ist die Gruppierung von Beobachtungen, die mit dem niedrigsten Wert all zugewiesen wird, eine Klasse 1, die nächste niedrigsten werden alle zugeordneten 2 und so weiter. Dies ist nicht das ranking in den meisten Sinne, dass ich gesehen habe, diskutiert, aber Stata ist
egen, rank()
wird erhalten Sie einen Teil des Weges.Aber den direkten Weg, welcher bereits in der Statalist thread zitiert elewhere in diesem thread (hier starten) ist einfacher im Geist als jede Lösung, die zitiert wird:
Einmal Daten sortiert auf
var_to_rank
dann, wenn sich Werte unterscheiden sich von vorhergehenden Werten am Anfang von jedem block der eindeutigen Werte einem Wert von 1 ist das Ergebnisvar_to_rank != var_to_rank[_n-1]
; sonst 0 ist das Ergebnis. Fazit diese 1en und 0EN kumulativ gibt die gewünschte variable. Die Präfix-Befehlbysort
funktioniert die Sortierung erforderlich und sorgt dafür, dass all dies geschieht getrennt in den Gruppen definiert durchgroup_id
. Keine Notwendigkeit füregen
(ein Befehl, dass viele Menschen, die nur verwenden Stata gelegentlich finden oft bizarren).Erklärung des Interesses: Die Statalist thread zitiert, zeigt, dass, wenn aufgefordert, eine ähnliche Frage auch ich glaube nicht an diese Lösung in einem.
InformationsquelleAutor Nick Cox
Folgendes funktioniert bei mir:
Sicher:
bysort group_id: egen desired_rank=rank(var_to_rank), unique
geben1 2 3 4
für Gruppe 2, und austauschenunique
durchtrack
geben Sie1 2 2 4
.Als Sie sagte, 'unique' - option gibt mir '1,2,3,4' und mein Ziel ist es, '1,2,2,3'.
Tut
egen desired_rank=group(var_to_rank)
produzieren, was Sie suchen? (aber ich würde nicht nennen dieses ranking.)Das tut es tatsächlich. Aber es funktioniert für den ganzen Datensatz nur da ich es nicht verwenden mit bysort :/
InformationsquelleAutor chl
Stolperte über eine solche Lösung auf dem Statalist:
Scheint, heraus zu Sortieren das Problem.
InformationsquelleAutor radek
@radek: Sie werden sicherlich bekommen es aussortiert, in der Zwischenzeit ... aber das hätte eine einfache (wenn auch nicht sehr elegante) Lösung:
egen group
diese Weise.InformationsquelleAutor sam
Weg, zu viel Arbeit. Einfach und elegant. Versuchen Sie diese ein.
gen desired_rank=int(var_to_rank/10)
(In der Tat, zum Beispiel, die
int()
ist redundant.)InformationsquelleAutor Lazy
diesen Befehl ausprobieren, es funktioniert für mich so gut:
egen newid=group(oldid)
InformationsquelleAutor bontey