Generierung einer neuen Variable

Fragen zu Stata Syntax und Do-Files.

Generierung einer neuen Variable

Beitragvon Starta » Do 23. Aug 2012, 00:12

Hallo. liebe Forumsmitglieder!

Ich hätte eine Frage in Bezug auf die Generierung einer neuen Variable. Dazu ein Beispiel-Datensatz:

Identifier Jahr Gewinn neue Variable
ABC 1998 -100 -100
ABC 1999 100 0
ABC 2000 200 200
ABC 2001 200 400
ABC 2002 -500 -100
ABC 2003 300 50
ABC 2004 -100 0
ABC 2005 200 100

Wie aus dem Beispiel ersichtlich, würde ich gerne eine neue Variable einführen, die für jeden Identifier den Gewinn in den Jahren 1998-2002 in voller Höhe aufaddiert aber ab 2003 nur den Gewinn in der Hälfte seiner Höhe berücksichtigt.

Vielen Dank für Eure Anregungen und liebe Grüße!
Starta
 
Beiträge: 19
Registriert: Mi 22. Aug 2012, 23:54
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Generierung einer neuen Variable

Beitragvon daniel » Do 23. Aug 2012, 10:06

In Deinem Beispiel gibt es nur einen Identifier (ABC), dehr ist mir das Zustandekommen der Ausprägung der neuen Variable nach 2003 unkalr.

Auch die anderen Ausprägungen verstehe ich nicht ganz. Wieso hat die neue Variable den Wert 0 im Jahr 1999, wenn im Jahr 1998 der Gewinn 100 beträgt, und Du von diesem Zeitpunkt an aufaddieren möchtest?

Du suchst vermutlich nach -by- und -egen-'s -total()- Funktion. Mit Details kann ich erst nach Klärung meiner Fragen weiterhelfen.
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: Generierung einer neuen Variable

Beitragvon Starta » Do 23. Aug 2012, 10:37

Hallo!

Erst einmal vielen Dank für Deine Hilfe!

Ich versuche es mal so zu veranschaulichen:

Identifier Jahr Gewinn neue Variable
ABC 1998 -100 -100
ABC 1999 100 0
ABC 2000 200 200
ABC 2001 200 400
ABC 2002 -500 -100
ABC 2003 300 50
ABC 2004 -100 0
ABC 2005 200 100
DEF 1998 0 0
DEF 1999 100 100
DEF 2000 100 200
DEF 2001 -50 150
DEF 2002 -100 50
DEF 2003 -400 -150
DEF 2004 500 50
DEF 2005 600 350

Also: Meine Daten sind bereits nach Identifier und Jahr geordnet. Nun soll die neue Variable den kumulierten Gewinn bis dato wiedergeben. 1998 ist das erste Jahr, also bleibt es für ABC bei dem negativen Gewinn (Verlust) in Höhe von -100. Ein Jahr später, in 1999, wird ein Gewinn von 100 erzielt, so dass das Konto quasi wieder ausgeglichen ist, da mit den vollen 100 aus 1999 verrechnet wurde. Ab 2003 jedoch, kann nur mit der Hälfte des entstandenen Gewinns verrechnet werden. In diesem Beispiel bei ABC also: 50 +0,5(-100)=0.

Hoffe, das erklärt meine Fragestellung etwas besser.

Vielen Dank!
Starta
 
Beiträge: 19
Registriert: Mi 22. Aug 2012, 23:54
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Generierung einer neuen Variable

Beitragvon daniel » Do 23. Aug 2012, 11:26

Deine Fragestellung war klar, mein Fehler. Ich habe das minus Zeichen nicht gesehen.

Für den ersten Teil (bis 2003) sollte etwas in der Art

Code: Alles auswählen
bys <Identifier> <Jahr> : egen <neue Variable> = sum(<Gewinn>) if (<Jahr> < 2003)


funktionieren.

Angenommen, Du hast ein balanciertes Panel (alle <Identifier> haben Beobchtungen für alle <Jahr>e) könnte in einem Schritt, etwas in dieser Art

Code: Alles auswählen
bys id (j) : g bar = cond(j < 3, foo + foo[_n - 1], foo*0.5 + foo[_n - 1])


klappen. Vielleicht solltest Du aber auch mit time-series Operatoren arbeiten, statt mit subscripten (help tsvarlist).
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: Generierung einer neuen Variable

Beitragvon Starta » Di 9. Okt 2012, 19:07

Hallo,

nochmal kurz zum ersten Teil deiner Antwort:

bys <Identifier> <Jahr> : egen <neue Variable> = sum(<Gewinn>) if (<Jahr> < 2003)

Wenn ich das so eingebe, gibt er mir in jedem Jahr (vor 2003) einfach den Gewinn desselben Jahres raus, hätte aber gerne die aktuelle Zwischensumme.

Jmd eine Antwort?

Vielleicht kennt jemand auch eine Möglichkeit, mir nur die Zwischensumme anzugeben, wenn in der Variable <Gewinn> keine missing values sind!
Starta
 
Beiträge: 19
Registriert: Mi 22. Aug 2012, 23:54
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Generierung einer neuen Variable

Beitragvon daniel » Mi 10. Okt 2012, 10:43

Ja, der code passt nicht wirklich. Sorry, war ein Blindflug. Hier ein code, mit Deinem Beispiel getestet*

Code: Alles auswählen
en id ,g(id2) // make identifier nummeric
xtset id2 y // declare panel dataset
bys id2 : g foo = sum(w) if (y < 2003)
bys id2 : replace foo = L.foo + 05*w


Wie Du beim Fall DEF auf die letzten beiden Werte in Deinem Beispiel kommst, kann ich nicht nachvollziehen. Da liegt denke ich ein Rechenfehler vor. Jedenfalls kommt nach der von Dir angegebenen Formel (Zwischensumme = Zwischensumme[t-1] + 0.5 * Gewinn) etwas anderes (100 und 400) raus.

Den Wunsch mit den fehlenden Werten verstehe ich noch nicht ganz. Willst Du bei einem fehlenden Wert in der Variablen <Gewinn> den ganzen Fall (<Identifier>) ausschließen, oder was genau stellst Du Dir da vor?

* Variablennamen:
Identifier: id
Jahr: y
Gewinn: w
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: Generierung einer neuen Variable

Beitragvon Starta » Mi 10. Okt 2012, 15:06

Hallo!

Damit ist mir schon sehr weiter geholfen, vielen vielen Dank!

Nur noch zwei Fragen: nun würde ich gerne bei der ersten Beobachtung den zwischengewinn auf null setzen, so dass er erst (nach sortierung und deklarierung als panel durch ID und Jahr) für jede ID ab der zweiten Beobachtung beginnt, die Zwischensumme zu bilden.

Dann würde ich gerne wissen, wie sich mein panel verändert, wenn ich nur IDs im Datensatz lasse, die keine Sprünge in den Beobachtungen pro Jahr haben, also durchgehend Zahlen in der Variable Gewinn aufweisen. Das Panel kann weiterhin ruhig unbalanciert sein, so dass ein Unternehmen Zahlen von 2000-2003 hat und ein anderes von 2002-2008 zum Beispiel. Ich erhoffe mir dadurch validere Ergebnisse in meiner dynamischen Schätzgleichung.

Grüße!!!
Starta
 
Beiträge: 19
Registriert: Mi 22. Aug 2012, 23:54
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Generierung einer neuen Variable

Beitragvon daniel » Mi 10. Okt 2012, 15:39

nun würde ich gerne bei der ersten Beobachtung den zwischengewinn auf null setzen


Dazu kannst Du mal mit _n und _N spielen. Etwa

Code: Alles auswählen
en id ,g(id2) // make identifier nummeric
xtset id2 y // declare panel dataset
bys id2 y : g foo = 0 (_n == 1)
bys id2 (y) : g foo = sum(w) if (y < 2003) & (_n > 1)
bys id2 (y) : replace foo = L.foo + 05*w if (y >= 2003) & (_n > 1)


Dann würde ich gerne wissen, wie sich mein panel verändert, wenn ich nur IDs im Datensatz lasse, die keine Sprünge in den Beobachtungen pro Jahr haben, also durchgehend Zahlen in der Variable Gewinn aufweisen.


Müsset ich kurz drüber nachdenken. Stata kann allerdings sehr gut mit Sprüngen umgehen. Kann aber dennoch sein, dass Du die -- aus welchen Gründen auch immer -- rausnehmen willst. Falls ich später nochmal Zeit finde, potse ich noch was dazu, kanns aber nicht versprchen.
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: Generierung einer neuen Variable

Beitragvon bentham » Do 11. Okt 2012, 16:33

Zum balancieren des Panels gibt es ein ado:
xtbalance
bentham
 
Beiträge: 2
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 0 Gäste