2016-05-12 13 views
-3

Ich habe eine Panel-Daten in Stata, die Industrie-und Jahr Dimensionen und 7 andere Variablen hat. Ich möchte dieses Panel nach Industrie-Jahr-Kombination in Untertafeln aufteilen und sie dann verwenden, um neue Variablen zu berechnen, die das mahascore von Paket verwenden. Hier ist die Struktur der Datenprobe (Zahlen für varlist nicht real sind, in meinem Datensatz sie nur einige numerische Variablen):Split Panel in Subpanels

firm_id year ind_id  var1 var2 var3 var4 var5 var6 var 7 
1  2008  1   1 2 3 4 5  6 7 
1  2009  1   1 2 3 4 5  6 7 
1  2010  1   1 2 3 4 5  6 7 
................................................................. 
2  2008  2000  1 2 3 4 5  6 7 
2  2009  2000  1 2 3 4 5  6 7 
2  2010  2000  1 2 3 4 5  6 7 
............................................................... 

Für jede dieser Variablen Ich möchte 72 neue Variablen erzeugen (9 Branchen * 8 Jahre), so dass alle Werte für jede Variable, die nicht zur Kombination Industrie-Jahr gehört, fehlen. Dann möchte ich 72 Varlisten generieren, die ich für jede Branchen-Jahres-Kombination getrennt nach mahascore (Mahalanobis-Distanz) berechne. Die Industrie-IDs (ind_ids) haben folgende Werte {1 2000 3000 4000 5000 6000 7000 8000 9000}. Die Zeitspanne reicht von 2008 bis 2015

Der Code, den ich geschrieben habe, ist falsch, aber ich hoffe, es wird helfen, zu verstehen, was ich tue:

*Generate 504 variables(8 years*9 industries * 7variables): 

forvalues i = 2008/2015 { 
    forvalues z = 1/9000 { 
     gen var1_`i'_`z'=var1 if year == `i' & ind_id == `z' 
     gen var2_`i'_`z'=var2 if year == `i' & ind_id == `z' 
     gen var3_`i'_`z'=var3 if year == `i' & ind_id == `z' 
     gen var4_`i'_`z'=var4 if year == `i' & ind_id == `z' 
     gen var5_`i'_`z'=var5 if year == `i' & ind_id == `z' 
     gen var6_`i'_`z'=var6 if year == `i' & ind_id == `z' 
     gen var7_`i'_`z'=var7 if year == `i' & ind_id == `z' 
} 
} 
*Create 72 varlists (with 7 variables for each year-industry combination): 
    global varlist1 var1_2008_1 var2_2008_1 var3_2008_1 var4_2008_1 var5_2008_1 var6_2008_1 var7_2008_1 
    global varlist2 var1_2009_1 var2_2009_1 var3_2009_1 var4_2009_1 var5_2009_1 var6_2009_1 var7_2009_1 
.................................................................... 
*Create list of lists  
global metavarlist varlist1 varlist2...varlist72 
*Calculate distance 
     foreach v in $metavarlist { 
      mahascore `v', gen(dist_M_`v') refmeans compute 

Vielleicht jemand hier meine Logik verbessern könnte.

+0

Wie bereits erwähnt, würde die Schleife über '1/9000' allein 9000 neue Variablen erzeugen. Es gibt keine eingebaute Beschränkung auf die Werte, die 'ind_id' in der Praxis hat. Die einfachste Abkürzung besteht darin, Ihre Branchenbezeichner mithilfe von 'gen, group()' einer Variablen mit 9 verschiedenen Werten von 1 bis 9 zuzuordnen. Siehe http://www.stata.com/support/faqs/data-management/creating-group-identifiers/index.html Ich verstehe fast nichts anderes in Ihrer Frage, da ich diese Art von Berechnung nie mache. –

Antwort

0

zu lange in den Raum für einen Kommentar zu passen:

Das Problem Bericht in seiner Gesamtheit ist, dass der Code „falsch“ ist. Was bedeutet das für jeden, der dies nicht mit Ihren Daten (die nicht zugänglich sind) ausprobieren kann? Sofern Sie keine Beispieldaten zur Verfügung stellen, also einen vollständigen Datensatz von bescheidener Größe, und das Problem in Übereinstimmung mit seinen Begriffen neu schreiben, kann ich nicht erkennen, dass Ihr Problem für andere sehr sinnvoll ist.

Die Schwierigkeit ist in diesem Fall durch die Tatsache, dass die Anzahl der erfahrenen Stata-Programmierer, die auch dieses benutzergeschriebene Paket verwenden, in der Tat sehr klein sein wird. Beachten Sie, dass Ihr vorheriger Thread aus ähnlichen Gründen keine Antworten erhalten hat.

So weit, so negativ.

Aber ich kann sagen, dass Ihre Eröffnung Doppelschleife wird 72000 neue Variablen erstellen, auch wenn die meisten von ihnen alle fehlenden Werte sind. Irgendwie wissen Sie, dass Sie 9 Branchen haben, also warum schleifen Sie über 1/9000? In verschiedenen Orten sagen Sie, dass Sie

72 neue Variablen

72 * 7 neue Variablen

Diese können im Einklang irgendwie will, aber ich sehe nicht, wie.

Der zweite Codeblock ist nicht vollständig.

+1

Nicht zu erwähnen, dass 'mahascore' itself zusätzliche 576 Variablen erstellen wird, wenn jede der 72 Variablen wie im Beispiel von OP 8 Variablen enthält. Ich kann mir nicht vorstellen, dass dies mit ~ 73.000 Variablen sehr reibungslos ablaufen wird. Ich bin gespannt, welcher Geschmack von Stata OP mehr als 32767 Variablen erlaubt. – ander2ed

+0

@ ander2ed 'Mahascore' erzeugt nur 1 Distanz über alle Attribute (7 Variablen). Also würde ich 72 Variablen bekommen, die ich (in der Theorie) zu einer Variablen zusammenfassen könnte, da 72 Variablen nur Werte für bestimmte Jahr-Industrie-Kombinationen enthalten würden. – In777

+0

@Nick Cox Vielen Dank für Ihre Antwort. Leider weiß ich nicht, wie ich meinen Code verbessern und völlig verstehen kann, dass die Frage schlecht geschrieben ist. Ich werde versuchen, es mit deinen Kommentaren zu verbessern. Ich hoffe, es wird helfen. – In777