Anzahl verschiedener Werte pro Ausprägung pro Quartal

Fragen zu Stata Syntax und Do-Files.

Anzahl verschiedener Werte pro Ausprägung pro Quartal

Beitragvon vermont » Di 2. Jul 2013, 15:04

Hallo!

In meinem Datensatz habe ich verschiedene Wirkstoffgruppen gegeben, den Namen der Firma für jedes Medikament und das Quartal.
In jeder Wirkstoffgruppe gibt es mehrere Medikamente, die zu dieser Gruppe gehören, und die auch von verschiedenen Firmen hergestellt werden. Ein Beispiel:

Wirkstoff: Quartal: Firma:
Verapamil 9 RATIO
Verapamil 9 WINTHROP
Verapamil 9 TAD
Verapamil 9 RATIO
Verapamil 9 RATIO
Verapamil 10 AWD
Verapamil 10 DEXCEL
Verapamil 10 1A PHARMA
Verapamil 10 HEUMANN

Ich möchte nun eine Variable generieren, die mir die Anzahl Firmen in einer Wirkstoffgruppe PRO QUARTAL wiedergibt. Firmen kommen pro Gruppe mehrmals vor (wie da z. B: RATIO), da sie dann mehrere Medikamente mit dem Wirkstoff herstellen. RATIO soll jedoch hier nur EINMAL gezählt werden.
In diesem Beispiel sollten also für Quartal 9 und Wirkstoff Verapamil von der zu generierenden Variable die Anzahl 3 wiedergegeben werden, da drei verschiedene Firmen.
Für Quartal 10 die Anzahl 4, da vier verschiedene Firmen.

Ich habe mal den Befehl "by wirkstoff: tabulate firma" eingegeben, da wird jedoch dann nur die Gesamtzahl aller Beobachtungen für sortiert nach Firmenname wiedergegeben über alle Quartale hinweg.
Das Problem ist auch, dass dieser count Befehl immer nur die Anzahl für eine oder mehrere Ausprägung angeben kann. Jedoch bräuchte einen Befehl, der mir die Anzahl VERSCHIEDENER vorhandener Ausprägungen wiedergibt.

Ich habe so viel herumprobiert! Ich komme einfach nicht weiter! :(
vermont
 
Beiträge: 11
Registriert: So 9. Jun 2013, 15:56
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Anzahl verschiedener Werte pro Ausprägung pro Quartal

Beitragvon daniel » Di 2. Jul 2013, 17:38

Code: Alles auswählen
clear
inp str9 Wirkstoff Quartal str8 Firma
Verapamil 9 RATIO
Verapamil 9 WINTHROP
Verapamil 9 TAD
Verapamil 9 RATIO
Verapamil 9 RATIO
Verapamil 10 AWD
Verapamil 10 DEXCEL
Verapamil 10 1A PHARMA
Verapamil 10 HEUMANN
end
l

bys Wirkstoff Quartal Firma : g foo = (_n == _N)
bys Wirkstoff Quartal (Firma) : replace foo = sum(foo)
bys Wirkstoff Quartal (Firma) : replace foo = foo[_N]
l
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: Anzahl verschiedener Werte pro Ausprägung pro Quartal

Beitragvon vermont » Mi 3. Jul 2013, 09:53

Danke für die schnelle Antwort! Aber könntest du mir den Code vielleicht kurz erklären?
Wofür soll der erste Teil sein:
clear
inp str9 Wirkstoff Quartal str8 Firma
Verapamil 9 RATIO
Verapamil 9 WINTHROP
Verapamil 9 TAD
Verapamil 9 RATIO
Verapamil 9 RATIO
Verapamil 10 AWD
Verapamil 10 DEXCEL
Verapamil 10 1A PHARMA
Verapamil 10 HEUMANN
end
l

Die Daten sind bereits alle in Stata drin. Also, eigentlich brauche ich die nicht eingeben. Wenn ich br eintippe, dann erscheint die Liste so, wie ich sie vorher aufgeschrieben habe. Dann brauche ich in den Input-Befehl doch nicht vorher noch, oder?
vermont
 
Beiträge: 11
Registriert: So 9. Jun 2013, 15:56
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Anzahl verschiedener Werte pro Ausprägung pro Quartal

Beitragvon daniel » Mi 3. Jul 2013, 10:24

Du brauchst den ersten Teil nicht, aber Du solltest etwas in dieser Art in Deinen zukünftigen Fragen verwenden, weil es mir (und anderen) damit leichter fällt, Dein Problem zu reproduzieren und eine Lösung zu erstellen. Nimm das quasi als "Vorbild". Ich belassen diesen Teil in der Antwort, weil ich die Antwort nicht für Dich alleine schreibe (das ist für mich einer der wichtigsten Vorteile eines Forums, und einer der entscheidenden Gründe, wesshalb ich keine PN beantworte), sondern für alle, die ein ähnliches Problem haben, hatten und haben werden. Jemand mit einem ähnlichen Problem, soll schnell und komfortabel in der Lage sein, das Problem inklusive Lösung direkt in ein do-file zu kopieren und in Stata nachzuvollziehen (vgl. ersten Satz), oder zumindest selbst ein reproduzierbares Beispiel zu erstellen.

In diesem konkreten Fall kann Dein Beispiel irreführend sein, da es sich im einen Spezialfall handelt, indem die drei Variablen nahezu in beliebiger Reihenfolge in den -sort- Befehl gesteckt werden können, um das gewünschte Ergebnis zu erzielen. Ich habe versucht eine allgemeine Lösung zu erstellen. Dazu musste ich Teile Deines Beispiels abändern (so z.B. einen weiteren Wirkstoff hinzufügen, und eine Firma, die im 9 Quartal vorkommt auch im 10 Quartal erscheinen lassen). All das ist um ein Vielfaches leichter, wenn ich nur eine Stelle im code ändern muss, statt die Daten jedesmal mühsam von Hand im Editor zu ändern.
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: Anzahl verschiedener Werte pro Ausprägung pro Quartal

Beitragvon vermont » Mi 3. Jul 2013, 12:24

Vielen Dank für deine Mühe! Ich verstehe, was du meinst.

Ich habe den Befehl gerade ausprobiert. Das Problem ist, dass er mir dann für jede einzelne Beobachtung eine 1 für die Variable foo (wie in deinem Beispiel) liefert. Bei der Eingabe hat Stata mir nun auch den kompletten Daten-Editor im Results-Fenster dargestellt.
Um noch einmal das Beispiel von mir zu verwenden. Ich möchte quasi eine Variable generieren, die wie gesagt die Anzahl der Firmen anzeigt, die in einem Quartal einen bestimmten Wirkstoff für ihr Medikament verwenden. Nennen wir die neue Variable "Anzahl".
Wenn diese Variable generiert worden ist, soll die Tabelle, wenn ich br eingebe, nachhher so aussehen:

Wirkstoff: Quartal: Firma: Anzahl:
Verapamil 9 RATIO 3
Verapamil 9 WINTHROP 3
Verapamil 9 TAD 3
Verapamil 9 RATIO 3
Verapamil 9 RATIO 3
Verapamil 10 AWD 5
Verapamil 10 DEXCEL 5
Verapamil 10 1A PHARMA 5
Verapamil 10 HEUMANN 5
Verapamil 10 RATIO 5

In Quartal 9 gibt es drei Firmen, die Verapamil produzieren (Ratio, Winthrop und Tad). In Quartal 10 gibt es fünf Firmen (AWD, Dexel, 1A Pharma, Heumann und Ratio). Es soll also für jedes Quartal dieselbe Zahl abhängig vom Wirkstoff angezeigt werden. Ich habe vor, die Variable "Anzahl" später in einer Regression zu verwenden.
Tut mir Leid, ich hoffe ich habe mich verständlich ausgedrückt. Ich möchte also, dass die neue Variable Teil des Datensatzes wird. Es soll jedoch nicht als Quasi-Output im Results-Fenster erscheinen.
vermont
 
Beiträge: 11
Registriert: So 9. Jun 2013, 15:56
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Anzahl verschiedener Werte pro Ausprägung pro Quartal

Beitragvon daniel » Mi 3. Jul 2013, 17:18

Ich habe den Befehl gerade ausprobiert. Das Problem ist, dass er mir dann für jede einzelne Beobachtung eine 1 für die Variable foo (wie in deinem Beispiel) liefert.


Sorry, kann ich das Problem nicht nachvollziehen. Mein code erstellt genau das, was Du möchtest.

Bitte erstelle ein replizierbares Beispiel.
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: Anzahl verschiedener Werte pro Ausprägung pro Quartal

Beitragvon vermont » So 7. Jul 2013, 15:41

Vielen Dank noch einmal für deine Hilfe! Du hast mich auf die richtige Fährte gebracht!
Hier hab ich jetzt noch einmal den Code, den ich verwendet habe und der auch die richtigen Ergebnisse geliefert zu hat. ;)

Code: Alles auswählen
bys wirkstoff quartal firma : gen step1 = _n
bys wirkstoff quartal : egen step2 = total(step1) if step1 == 1
bys wirkstoff quartal : egen anzahl_firmen = max(step2)
vermont
 
Beiträge: 11
Registriert: So 9. Jun 2013, 15:56
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Anzahl verschiedener Werte pro Ausprägung pro Quartal

Beitragvon daniel » So 7. Jul 2013, 22:26

Danke für die Lösung. Lass mich eine Sache ergänzen und nochmal nachfrage, wo genau das Problem mit meiem code liegen soll. ich erhalte exakt das gewünschte Ergebnis.

Ergänzung.

In Deinem code solltest Du in den letzen beiden Zeilen beim -sort-ieren jeweils (Firma) ans Ende der Variablenliste setzen. Ansonsten ist die Lösung "instabiel", weil die Firmen sonst rein zufällig innerhalb der Wirkstoffe und Quartale angeordnet werden.
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: Anzahl verschiedener Werte pro Ausprägung pro Quartal

Beitragvon vermont » Di 9. Jul 2013, 10:26

Wenn ich am Ende noch (firma) schreiben würde, ist da ein unterschied, ob ich es in Klammern schreibe oder ohne wie in der ersten Zeile?

Hm, ich weiß nicht, weshalb es mit deinem Code nicht geklappt hat. Wofür steht denn die Funktion sum(foo)? Ist das die Summe? Und was bedeutet in diesem Zusammenhang _n == _N aus der ersten Zeile?
vermont
 
Beiträge: 11
Registriert: So 9. Jun 2013, 15:56
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Anzahl verschiedener Werte pro Ausprägung pro Quartal

Beitragvon daniel » Di 9. Jul 2013, 11:45

Wenn ich am Ende noch (firma) schreiben würde, ist da ein unterschied, ob ich es in Klammern schreibe oder ohne wie in der ersten Zeile?


Ja es macht sogar einen großen Unterschied, ob Du Klammern verwendet oder nicht -- deshalb gibt es die ja. Ausführlich mit Beispielen erklärt wird das unter -help by-.

Hm, ich weiß nicht, weshalb es mit deinem Code nicht geklappt hat.


Ich bin immer noch sicher, dass mein code sehr wohl funktioniert, und Du hast auch noch kein reproduzierbares Beispiel erstellt, in dem zu sehen wäre, das und/oder was daran nicht funktionieren soll. Es geht mir hier weniger um mein Ego, als darum zu zeigen, dass es aneder Wege als (das extrem langasame -egen-) gibt.

Wofür steht denn die Funktion sum(foo)? Ist das die Summe?


-help sum()-

Und was bedeutet in diesem Zusammenhang _n == _N aus der ersten Zeile?


_n zählt die Beobachtungen von 1 bis k
_N ist die Anzahl der Beobachtungen

Kombiniert man beide mit dem -by- prefix, beziehen sich diese Systemvariablen auf die jeweiligen Subgruppen. _n == _N bedeutet dann, die letzte Beobachtung in einer Subgruppe.
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


Zurück zu Stata Syntax

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron