2017-10-07 3 views
0

Ich möchte mehrere Excel-Dateien aus einem Ordner in Stata importieren und sie als separate DTA-Dateien speichern. Jedes Jahr hat 4 Viertel der Blätter. In jedem Quartal gibt es 60 Blatt. Ich möchte jedes Blatt einzeln importieren.Schleife zum Speichern mehrerer Dateien

z.

2004 Quartal 1 hat 1- Blatt in 2004Q11.dta 1

2004 Quarter zu sparen hat Sheet60- in 2004Q60

zu retten Gibt es eine Möglichkeit, es in einer Schleife zu schreiben, für Geschwindigkeit?

local quarter q1 q2 q3 q4 
local i= 0 
foreach q of quarter { 
    foreach a of numlist 1/10 { 
     import excel "2012`quarter'data", sheet("Sheet`i'") clear 
     save "2012`quarter'`i'.dta", replace 
    } 
} 

Antwort

0
local quarter q1 q2 q3 q4 
local i= 0 
foreach q of quarter{ 
foreach a of numlist 1/10 { 
import excel "2012`quarter'data", sheet("Sheet`i'") clear 
save "2012`quarter'`i'.dta", replace 
} 
} 

Einige hier Verwirrungen über

  1. wie foreach verwenden: die of Syntax erfordert ein Schlüsselwort. foreach wird nicht nach einem lokalen Makro ohne local als Schlüsselwort suchen.

  2. mit einem Schleifenindex innerhalb der Schleife. Sie setzen i auf 1 und ignorieren Ihren Schleifenindex. Das ist legal, aber vermutlich nicht das, was Sie wollen, denn sonst lesen Sie das gleiche Blatt zehn Mal.

Sie könnteforeach hier verwenden, aber beide Loops sind leichter mit forval.

forval q = 1/4 { 
    forval a = 1/60 { 
     import excel "2012q`q'data", sheet("Sheet`a'") clear 
     save "2012q`q'`a'.dta", replace 
    } 
} 

Unbedingt kann ich dies nicht überprüfen. Warum Sie 10 nicht 60 schreiben, ist nicht klar.

Die Erstellung von 240 separaten .dta-Dateien lässt nur eine Strategie übrig, wie diese kombiniert werden können, aber das wäre eine separate Frage.

+0

Danke, ich habe 1/10 laufen lassen, um es zu testen. Danke für den Tipp, ich habe nach alten Codes gesucht, die der vorherige Typ geschrieben hat und es war alles "foreach". :) –

Verwandte Themen