2017-05-18 9 views
0

Ich habe einen Panel-Datensatz von 2006 bis 2012. Ich habe eine neue Variable entry generiert, die für das Unternehmen, das in ein Land eingegeben wurde, den Wert 1 annimmt. Wenn zum Beispiel ein Unternehmen einen fehlenden Wert (.) Für seine Verkäufe zum Zeitpunkt (t) hat, nimmt es einen Wert von 0 an und zu (t + 1) wenn es in ein Land mit anderen Worten einen Wert für seine Verkäufe eingibt, braucht es a Wert von 1. Der erfolgreiche Befehl, den ich für diese verwendet wird, ist wie folgt:Erstes und letztes Vorkommen in Stata

egen firm_id=group(firm country) 

by firm_id (year), sort: gen byte entry = /// 
sum(inrange(sales, 0,.)) == 1 & sum(inrange(sales[_n - 1],0,.)) == 0 

Da meine Daten aus dem Jahr 2006 beginne ich die Beobachtungen für dieses Jahr mit dem Befehl ausgeschlossen:

bysort firm (year) : replace entry = 0 if year == 2006 

aber was ich will, ist statt mit 0 Werten, fehlende Werte für die folgenden Jahre nach der Eingabe haben (zB bei t + 2 oder t + 3).

Das gleiche habe ich für den Ausgang angelegt, aber ich änderte die Sortierung Jahr:

gen nyear = -year 

by firm_id (nyear), sort: gen byte exit = /// 
sum(inrange(sales, 0,.)) == 1 & sum(inrange(sales[_n - 1],0,.)) == 0 

seit dem letzten Beobachtungsjahr in meiner Daten 2012 ist ausgeschlossen ich diese Beobachtungen:

bysort firm (year) : replace exit = 0 if year == 2012 

Wieder hier, was ich will, ist anstatt 0 Werte, zu haben fehlende Werte für die folgenden Jahre nach seinem Ausgang (zB bei t + 2 oder t + 3).

Antwort

0

Wie ich es verstehe, fehlt die Variable sales, wenn keine und positive sonst sind.

Sie möchten, dass Indikatoren für ein Jahr die ersten und letzten Jahre des Verkaufs für eine Firma in einem Land sind.

Ich denke, das bringt Sie am meisten. Zuerst brauchen wir Beispieldaten!

* Example generated by -dataex-. To install: ssc install dataex 
clear 
input float(firm_id year sales) 
1 2006 . 
1 2007 . 
1 2008 42 
1 2009 42 
1 2010 42 
1 2011 . 
1 2012 . 
2 2006 . 
2 2007 666 
2 2008 666 
2 2009 . 
2 2010 . 
2 2011 . 
2 2012 . 
end 

Die ersten und letzten Daten sind die Mindest- und Höchstdaten, vorausgesetzt, es gibt Verkäufe.

egen first = min(cond(sales < ., year, .)), by(firm_id) 
egen last = max(cond(sales < ., year, .)), by(firm_id) 

Für eine Diskussion der Technik siehe section 9 of this paper. Dann (1.) Indikatoren folgen direkt

gen isfirst = cond(year == first, 1, .) 
gen islast = cond(year == last, 1, .) 

list, sepby(firm_id) 

    +----------------------------------------------------------+ 
    | firm_id year sales first last isfirst islast | 
    |----------------------------------------------------------| 
    1. |  1 2006  . 2008 2010   .  . | 
    2. |  1 2007  . 2008 2010   .  . | 
    3. |  1 2008  42 2008 2010   1  . | 
    4. |  1 2009  42 2008 2010   .  . | 
    5. |  1 2010  42 2008 2010   .  1 | 
    6. |  1 2011  . 2008 2010   .  . | 
    7. |  1 2012  . 2008 2010   .  . | 
    |----------------------------------------------------------| 
    8. |  2 2006  . 2007 2008   .  . | 
    9. |  2 2007  666 2007 2008   1  . | 
10. |  2 2008  666 2007 2008   .  1 | 
11. |  2 2009  . 2007 2008   .  . | 
12. |  2 2010  . 2007 2008   .  . | 
13. |  2 2011  . 2007 2008   .  . | 
14. |  2 2012  . 2007 2008   .  . | 
    +----------------------------------------------------------+ 

Ich habe nichts anderes getan, für das Jahr 2006 oder 2012. Sie könnten nur besondere Regeln in die cond() Syntax bauen.

+0

Lieber Nick, vielen Dank das funktioniert so schafft fehlende Werte für die folgenden Jahre nach dem Ein- und Ausstieg. Außerdem möchte ich nicht, dass es für die früheren Jahre seines Eintritts fehlende Werte erzeugt. Zum Beispiel in Ihrem Beispiel unter Berücksichtigung der Variablen "isfirst" für die firma_id (1) möchte ich für die Jahre 2006 und 2007 "0" anstatt "fehlen" haben. Mit anderen Worten, 0 Werte für die letzten Jahre seiner Eingabe enden mit fehlenden Werten für die folgenden Jahre nach ihrer Eingabe. –

+0

Einfache Übung für den Schüler! Tipp: 'cond (Jahr

+0

Ich habe das auch geschafft, indem ich eine neue Variable generiert habe, aber Ihr Hinweis ist viel besser, so dass Sie keine weitere Variable erstellen müssen. Vielen Dank Nick. Ich schätze deine Hilfe sehr. –

Verwandte Themen