2016-04-10 8 views
1

Meine Frage ist verwandt mit existierende Diskussionen über Statalist wie this one. Ich möchte eine neue Frage stellen, weil ich komplexere Muster von Tafeln betrachten möchte, die über die Anzahl aufeinanderfolgender Zauber hinausgehen.Wie kann man (komplexes) Panelmuster bestimmen?

Say, angesichts einer Gruppe von Firmen, ich möchte überprüfen, wie viele Jahre diese Firma keine Immobilienbesitz land == 0 besitzt, bevor es einige land > 0 kauft.

Oder noch anspruchsvoller, wie viele Jahre das Eigentum der Firma unter einem Niveau land < 0.05 * land[s] ist, wobei sich s auf das Jahr bezieht, in dem eine Firma Immobilien kauft.

Mein erster Gedanke ist es, egen Befehl zu verwenden. Aber im Gegensatz zu anderen üblichen Fällen ist der spezifische Zeitpunkt des Immobilienkaufs für jedes Unternehmen unterschiedlich oder existiert gar nicht.

Mein zweiter Gedanke ist, das Paket xtpatternvar zu verwenden, mit geringfügigen Änderungen. Mit begrenzter Kenntnis der Stata-Programmierung verstehe ich den Quellcode jedoch nicht ganz.

Antwort

3

Konzentrieren wir uns auf Ihr echtes Problem, das xtpatternvar nicht versteht (SSC, wie Sie erklären sollten), aber in Panel-Daten ermitteln, wie lange eine Variable eine Bedingung in jedem Panel erfüllt, bevor es die Komplementärbedingung erfüllt . Es ist nicht einfach, aber es ist wichtig, über bestimmte Beispiele hinaus zu verallgemeinern, um Fragen zu stellen. Andere Leute interessieren sich vielleicht nicht für Landkaufdaten, aber sie können das gleiche allgemeine Problem haben.

Dies sind nur ein paar kleine Wendungen zu dem in http://www.stata.com/support/faqs/data-management/dropping-spells-of-missing-values/ besprochenen Problem. Diese FAQ diskutiert verschiedene Techniken. Ich werde nur eins auswählen. Die gesamte FAQ kann sich sehen lassen. (Weitere Moral: Schauen Sie sich die FAQs auf StataCorps Website an.)

Es ist auch eine gute Idee, Daten, die sie verwenden können, sofort an Leute zu senden, die antworten. Auf dem Statalist werden Leute gebeten, dataex (SSC) zu benutzen, und es gibt keinen Grund für niedrigere Standards hier. Dies ist konsistent mit https://stackoverflow.com/help/mcve

Das erste Mal (hier Jahr) in jedem Panel ist das Minimum der Zeitvariable in jedem Panel. (In einigen Datensätzen müssen Sie das vielleicht nicht berechnen; Sie wissen, dass es immer eine bestimmte Zeit ist.) Das erste Mal, dass eine Bedingung erfüllt ist, ist wieder ein Minimum, aber jetzt notwendigerweise bedingt. Die gewünschte Zeitspanne ist nur der Unterschied zwischen ihnen. Beachten Sie, dass im Code xtset oder tsset keine Daten angenommen werden; keine Annahme von gleich beabstandeten Werten oder ausgewogenen Panels; und keine Annahme, dass es zu Beginn jedes Panels einen Zauber komplementärer Werte gibt. Beachten Sie, dass die Lösung für Ihr "ausgeklügeltes" Problem gleichartig ist.

clear 
input float(firm response year) 
1 0 2001 
1 0 2002 
1 12 2003 
1 345 2004 
1 6789 2005 
2 12 2001 
2 345 2002 
2 6789 2003 
2 12 2004 
2 34 2005 
end 

egen first = min(year), by(firm) 

egen first_pos = min(cond(response > 0, year, .)), by(firm) 

gen time_to_first_pos = first_pos - first 

list 

    +-------------------------------------------------------------+ 
    | firm time response year first_~s first time_t~s | 
    |-------------------------------------------------------------| 
    1. | 1  1   0 2001  2003 2001   2 | 
    2. | 1  2   0 2002  2003 2001   2 | 
    3. | 1  3   12 2003  2003 2001   2 | 
    4. | 1  4  345 2004  2003 2001   2 | 
    5. | 1  5  6789 2005  2003 2001   2 | 
    |-------------------------------------------------------------| 
    6. | 2  1   12 2001  2001 2001   0 | 
    7. | 2  2  345 2002  2001 2001   0 | 
    8. | 2  3  6789 2003  2001 2001   0 | 
    9. | 2  4   12 2004  2001 2001   0 | 
10. | 2  5   34 2005  2001 2001   0 | 
    +-------------------------------------------------------------+ 
Verwandte Themen