Definieren von Dummies mittels -cond-

Statistische Auswertung von Longitudinal- und Panel-Daten mit Stata.

Definieren von Dummies mittels -cond-

Beitragvon filaglad » Mi 4. Jul 2012, 16:27

Hallo,
es geht um ein Problem, dass anfangs in dem Thread "Kalkulation von Variablen" (http://www.stata-forum.de/longitudianal-und-panel-analyse-f11/kalkulation-von-variablen-t103.html) besprochen wurde.
Ich habe ein Datenset mit mehreren Firmen über mehrere Jahre und möchte "size dummies" definieren (in Quntiles). Den folgenden Code hatte Daniel vorgeschlagen und dieser funktioniert auch gut, mit dem einzigen nachteil, dass bei einigen observationen einfach werte von anderen variablen aufeinmal mit "." ausgegeben werden. Hier ersteinmal der code:
Code: Alles auswählen
xtset ID month
qui levelsof month ,l(avar)
reshape wide mmv , i(ID) j(month)
foreach y of loc avar {
_pctile mmv`y' ,p(20 40 60 80)
qui g byte mvdb`y' = cond(mmv `y' <= `r(r1)', 1, cond(mmv `y' > `r(r1)' & mmv `y' <= `r(r2)', 2, cond(mmv `y' > `r(r2)' & mmv `y' <= `r(r3)', 3, cond(mmv `y' > `r(r3)' & mmv `y' <= `r(r4)', 4, 5))))
}
reshape long mmv mvdb, i(ID) j(month)

Zu anfang hatte ich bemerkt, dass einige meiner Market-Values negativ sind und diese habe ich eliminiert, verbleibe also nur noch mit positiven werten. Bevor ich die Schleife laufen lasse sind alle daten vollständig, sobald sie einmal gelaufen ist werden dann aufeinmal die Werte von allen anderen variablen von bestimmten observationen mit "." überschrieben. wenn ich diese observationen dann rausschmeiße -drop if mmv>=.- und dann die schleife erneut laufen lasse, passiert dasselbe! es kann also nicht an fehlenden "mmv" werten liegen.

Ich habe auch versucht, die Dummies in einem separaten *dta file zu definieren und dann nur die Dummy variable "mvdb" in mein vollständiges Datenset zu mergen. Hier passiert dann dasselbe, von bestimmten observationen werden einfach werte mit "." ersetzt.

Hat irgendjemand eine Idee wo der fehler ist?
Vielen Dank im Voraus!
filaglad
 
Beiträge: 42
Registriert: So 17. Jun 2012, 13:18
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Definieren von Dummies mittels -cond-

Beitragvon daniel » Mi 4. Jul 2012, 17:20

Kannst Du das in einem Spieldatensatz replizieren, oder genauer erklären/skizzieren? Optimal wäre ein (mini) Datensatz mittels -input- Befehl zu erzeugen, in dem Du das Problem darstellen kannst.

Die Wortwahl ist hier sehr entscheidend. "Überschrieben" werden kann mit diesem code definitiv nichts, weil kein -replace- Befehl verwendet wird. Durch die Umformung (-reshape-) können fehlende Werte auftreten. Möglicher Weise musst Du hier vor dem ersten -reshape- Befehl nur diejenigen Variablne behalten, die Du in der Schleife benötigst. Später kannst Du die Daten dann zusammen -merge-n. Was bei Deinem -merge- Versuch schief ging, kann ich schwer beurteilen, weil ich nicht weiß, was Du wie gemacht hast.

Auch der exakte code, der verwendet wurde ist wichtig.

[code]
foreach y of loc avar {
_pctile mmv`y' ,p(20 40 60 80)
qui g byte mvdb`y' = cond(mmv `y' <= `r(r1)', 1, cond(mmv `y' > `r(r1)' & mmv `y' <= `r(r2)', 2, cond(mmv `y' > `r(r2)' & mmv `y' <= `r(r3)', 3, cond(mmv `y' > `r(r3)' & mmv `y' <= `r(r4)', 4, 5))))
}
[code]


Hier stehen Leerzeichen zwischen mmv und `y' im ersten Element in -cond()-. Die gehören da sicher nicht rein, sollten aber, wenn mich nicht alles täuscht, auch eine Fehlermeldung provozieren.
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: Definieren von Dummies mittels -cond-

Beitragvon filaglad » Mi 4. Jul 2012, 20:25

hallo daniel, leider kann ich weder *.csv *.dta *.xls noch *.txt hochladen, da keine dieser dateien erlaubt sind.
leider kann ich auch bei einer privaten nachricht keine datei anhängen. gibt es einen anderen weg?

filaglad hat geschrieben:Hier stehen Leerzeichen zwischen mmv und `y' im ersten Element in -cond()-. Die gehören da sicher nicht rein, sollten aber, wenn mich nicht alles täuscht, auch eine Fehlermeldung provozieren.

das hat mir keine fehlermeldung ausgegeben, aber auch nach löschen der leerzeichen tritt der selbe fehler auf.

Überschreiben heißt, das der code vorher so aussieht:
Code: Alles auswählen
ID  xy  mmv
01  3  100
01  4  110
02  5  500
02  6  505


und nachher so:
Überschreiben heißt, das der code vorher so aussieht:
Code: Alles auswählen
ID  xy  mmv mvdb
01  3  100   1
01  4  110   1
02  .  .     5 
02  .  .     5


selbst wenn ich jetzt die "." observartions lösche und dann merge, passiert dasselbe im "meged sheet".
filaglad
 
Beiträge: 42
Registriert: So 17. Jun 2012, 13:18
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Definieren von Dummies mittels -cond-

Beitragvon daniel » Mi 4. Jul 2012, 23:02

Ich schätze <xy> ist nicht <month> von oben?

Versuch mal etwas in der Richtung (Variablennnamen aus Deinen Beispielen):

Code: Alles auswählen
xtset ID month
qui levelsof month ,l(avar)
reshape wide mmv ,i(ID) j(month)
foreach m of loc avar {
    _pctile mmv`m' ,p(20 40 60 80)
    qui g byte mvdb`m' = cond([...])
}
reshape long mmv mvdb ,i(ID) j(month)
keep ID month mvdb*
sa mvdb.dta
u <master>.dta ,clear
mer 1:1 ID month using mvdb.dta
erase mvdb.dta


<master> ist durch den Namen des ursprünglichen Datensatzes zu ersetzen. Das ist komplett "blind" geschrieben. Selbst wenn es funktioniert, mag es gut möglich sein, dass es effizientere Wege gibt.

Edit: war ein dummer Fehler im code, möglicher Weise funnktioniert er jetzt.
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: Definieren von Dummies mittels -cond-

Beitragvon filaglad » Sa 7. Jul 2012, 19:42

also ich habs jetzt gelößt bekommen. Zum einen muss ich anmerken, dass meine formulierung nciht ganz korrekt war.
Folgendes: der fehler trat nach dem ersten -reshape wide- auf. Wie ich herausgefunden habe, waren einige von meinen panels für "mmv" nicht vollständig (für "index" aber schon!!!"), sprich für ID001 (z.B.) hatte ich nicht die daten für die komplette Zeitperiode. Daraufhin hat stata beim "reshapen" bei panels mit fehlenden daten für "mmv" den dateneintrag mit "." ergänzt hat, das gleiche aber auch für meine ürbigen variablen des panels getan hat. sprich:
Code: Alles auswählen
ID   Zeit   mmv   index
001   1990   100     55   
001   1991   110     56
001   1992   .       57


wurde nach dem -reshape wide- -gen mvdb- -reshape long- zu:

Code: Alles auswählen
ID   Zeit   mmv   index
001   1990   100     55   
001   1991   110     56
001   1992   .       .


ich habe einfach nach jedem reshape mit -drop if mmv>=.- alle "neu kreierten" observationen wieder gelöscht. jetzt klappt es! danke für deine hilfe daniel!
filaglad
 
Beiträge: 42
Registriert: So 17. Jun 2012, 13:18
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post


Zurück zu Longitudianal und Panel-Analyse

Wer ist online?

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

cron