Unbalanciertes Panel - Looping

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

Unbalanciertes Panel - Looping

Beitragvon stephan_muc » So 4. Mai 2014, 14:25

Hallo Leute,

ich habe ein Problem, dass man glaube ich nur mit Loops bewältigen kann. Allerdings kenne ich mich da nicht so aus.

Ich habe ein unbalanciertes Panel, das so aussieht:

firm_id year bilanzsystem
1 2000 0
1 2001 0
1 2002 0
2 1998 0
2 1999 0
2 2000 1
2 2001 1
2 2002 1
3 1995 1
3 1996 1
3 1997 1
3 1998 1

"bilanzsystem" kann nur den Wert 1 oder Null annehmen, je nachdem, nach welchem System die Firma bilanziert. Null = lokales System, 1 = internationales System.

Ich benötige einen Algorithmus, der innerhalb einer Firma überprüft, ob, und wenn ja ab wann, die Firma vom lokalen System auf das internationale System gewechselt hat. Es muss also eine neue Variable generiert werden, "yearofchange", die bei Firma 1 mit "no change - immer lokal", bei Firma 2 mit "2000" und bei Firma 3 mit "no change - immer international" gefüllt ist.

Ich denke, es kommt entweder while, foreach oder forvalue in Frage. Leider kenne ich nicht den Unterschied.

Wichtig ist, dass die Analyse, ob und wenn ja von Null auf 1 gewechselt wird, innerhalb einer Firma stattfindet! Vielleicht ist bysort hier hilfreich, ich habe es aber nicht geschafft, bysort mit einem Loop zu verbinden.

Danke für eure Hilfe!!!

Stephan
stephan_muc
 
Beiträge: 8
Registriert: Sa 22. Dez 2012, 01:09
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Unbalanciertes Panel - Looping

Beitragvon daniel » So 4. Mai 2014, 18:03

Schleifen sind nicht nötig. Eine Serie von -by- genügt hier sicher. Wie genau die Umsetzung aussehen kann, hängt u.a. davon ab, ob wie genau die Wechsel aussehen. Ist es z.B. mögich von 1 auf 0 zu wechseln? Ist es für eine Firme möglich mehrfach hin und her zu wechseln?
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: Unbalanciertes Panel - Looping

Beitragvon stephan_muc » So 4. Mai 2014, 19:30

Hi

wie würden die by-commands aussehen? Es ist nicht möglich, von 1 auf 0 zu wechseln oder mehrfach zu wechseln.

Mit by habe ich schon experimentiert, aber das Problem ist, dass das Panel unbalanciert ist. Die Firmen haben unterschiedlich viele Jahre vor und nach dem Wechsel, sofern sie überhaupt gewechselt haben.

welchen command würdest du nehmen nach bysort firmid: ??

danke
stephan_muc
 
Beiträge: 8
Registriert: Sa 22. Dez 2012, 01:09
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Unbalanciertes Panel - Looping

Beitragvon daniel » So 4. Mai 2014, 20:38

Hier ist eine Möglichkeit, Schritt für Schritt. Der code ließe sich sicher komprimieren oder komplett anders gestalten.

Code: Alles auswählen
clear

inp firm_id year bilanzsystem
1 2000 0
1 2001 0
1 2002 0
2 1998 0
2 1999 0
2 2000 1
2 2001 1
2 2002 1
3 1995 1
3 1996 1
3 1997 1
3 1998 1
end
l ,sepby(firm_id)

bys firm_id (year) : g change = sum(bilanzsystem)

l ,sepby(firm_id)

bys firm_id (year) : g yearofchange = ///
cond((inlist(change[_N]/_N, 0, 1)), bilanzsystem, ///
cond((change == 1 & bilanzsystem == 1), year, .))

l ,sepby(firm_id)


bys firm_id (yearofchange) : replace yearofchange = yearofchange[1]

l ,sepby(firm_id)
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: Unbalanciertes Panel - Looping

Beitragvon stephan_muc » So 4. Mai 2014, 22:15

Danke für den Code! Ich bin allerdings kein Stata-Experte und tue mich mit dem Code etwas schwer.

hier meine Fragen:
- input muss ich nicht machen, wenn ich firm_id, year, und bilanzsystem schon generiert habe, oder?
- was bedeutet 1 , sepby(firm_id)? es gibt keine Funktion, die sepby heisst, oder?
- bysort firm_id (year): generate change = sum(bilanzsystem) funktioniert.
- die nächsten drei Zeilen verstehe ich nicht. warum /// ?

Fehlermeldung: "factor variables and time-series operators not allowed"

Ich habe noch ein anderes Problem: meine firm_id ist gar nicht 1, 2, 3, etc. sondern hat unterschiedliche Abstände (zB 253, 1620, 2310 etc.) Ich muss also erstmal die FirmID umwandeln. Geht das auch mit bysort?
stephan_muc
 
Beiträge: 8
Registriert: Sa 22. Dez 2012, 01:09
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Unbalanciertes Panel - Looping

Beitragvon daniel » So 4. Mai 2014, 22:25

Der code sollte so wie er ist in ein do-file kopiert werden und komplett ausgeführt werden. Dadurch sollte verständlich werden, was gemacht wird.

- input muss ich nicht machen, wenn ich firm_id, year, und bilanzsystem schon generiert habe, oder?


In der Tat ist das lediglich da, um ein replizierbares Minimalbeispiel zu erzeugen und kein Teil der "Lösung". Für kommende Fragen unbedingt merken und genau so etwas angeben. Hilft allen Hilfsbereiten Dir zu helfen.

- was bedeutet 1 , sepby(firm_id)? es gibt keine Funktion, die sepby heisst, oder?


Es ist keine 1 sondern ein -l- und die Minimalabkürzung für den -list- Befehl. Die -sepby()- Option hilft den output nachvollziehbarer zu gestalten. Es ist mir sehr wichtig, dass Du nachvollziehst, was ich in den drei Schritten mache.

- die nächsten drei Zeilen verstehe ich nicht. warum /// ?


Die drei slashes (///) sagen Stata, dass der Befehl noch nicht zu Ende ist, und in der nächsten Zeile fortgesetzt wird. Ist übersichtlicher, als eine lange Zeile code zu schreiben.

Fehlermeldung: "factor variables and time-series operators not allowed"


Ganz sicher nicht, wenn der code aufeinmal ausgeführt wird.

Ich habe noch ein anderes Problem: meine firm_id ist gar nicht 1, 2, 3, etc. sondern hat unterschiedliche Abstände (zB 253, 1620, 2310 etc.) Ich muss also erstmal die FirmID umwandeln. Geht das auch mit bysort?


Du hast nicht nachvollzogen, was ich gemacht habe. Die Nummerierung der Firmen ist völlig irrelevant. es könnten sogar strings sein, solange eine Firma immer mit dem gleichen code identifiziert wird.
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: Unbalanciertes Panel - Looping

Beitragvon stephan_muc » Mo 5. Mai 2014, 11:34

ok, danke für die Erläuterungen!

Es funktioniert jetzt. Ein paar Fragen noch:
- brauche ich dreimal die list-Funktion? Da ich sehr viele Firmen habe, dauert die Output-Generierung sehr lange (auch mit set more off)
- ich habe den Hauptteil jetzt nachvollzogen. Das x in cond(x, a, b, c) ist die inlist-Funktion und das b ist eine weitere cond-Funktion, richtig? Kannst du mir noch sagen, wofür der Punkt am Ende vor der Klammer steht?

Ok, ich muss die firm_id nicht anpassen, danke für den Tipp. Aber eine Sache muss ich noch machen: die Firmen haben unterschiedlich viele Jahre und der Policy Change (Wechsel von lokalem System auf internationales System) geschah in 2005. Ich muss sicherstellen, dass ich nur solche Firmen in der Stichprobe habe, die eine gewisse Anzahl an Jahren vor und nach 2005 aufweisen. Kennst du dafür einen guten Befehl in Stata?
stephan_muc
 
Beiträge: 8
Registriert: Sa 22. Dez 2012, 01:09
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Unbalanciertes Panel - Looping

Beitragvon daniel » Mo 5. Mai 2014, 14:30

- brauche ich dreimal die list-Funktion?


-list- ist ein Befehl, keine Funktion. Du benötigst das gar nicht. Das ist nur dazu da, zu sehen, was genau passiert, bzw. welche Werte die neuen Variablen annehmen.

Kannst du mir noch sagen, wofür der Punkt am Ende vor der Klammer steht?


Das ist ein numerischer fehlender Wert. Du kannst im Prinzip jeden beliebigen Wert einsetzen -- wie gesagt, die Lösung ist sicher nicht die effizienteste oder "schönste".

Ich muss sicherstellen, dass ich nur solche Firmen in der Stichprobe habe, die eine gewisse Anzahl an Jahren vor und nach 2005 aufweisen. Kennst du dafür einen guten Befehl in Stata?


Das lässt sich vermutlich mit ähnlichen Techniken bewerkstelligen. Ich müsste das auch ausprobieren. Stell eine klare Regel auf, welche Firmen Du behalten willst, welche nicht. Dann erzeuge Dir einen Beispieldatensatz, ließ nochmal aufmerksam das help-file zu -bysort-, insbesondere die Verwendung von Klammern, und veruch Dich mal.

Beste Grüße
Daniel
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 Longitudianal und Panel-Analyse

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast