2017-10-07 6 views
0

Je souhaite importer plusieurs fichiers Excel d'un dossier dans Stata et les enregistrer sous forme de fichiers dta distincts. Chaque année a 4 trimestres de feuilles. Dans chaque trimestre, il y a 60 feuilles. Je veux importer chaque feuille individuellement.Boucle pour enregistrer plusieurs fichiers

E.g.

2004 Quartier 1 a 1 feuille pour enregistrer dans 2004Q11.dta

trimestre 2004 1 a Sheet60- pour sauver dans 2004Q60

Est-il possible de l'écrire dans une boucle pour la vitesse?

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 
    } 
} 

Répondre

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 
} 
} 

Quelques confusions ici à propos

  1. comment utiliser foreach: la syntaxe of nécessite un mot-clé. foreach ne cherchera pas dans une macro locale sans mot-clé local.

  2. en utilisant un index de boucle à l'intérieur de la boucle. Vous définissez i sur 1 et ignorez votre index de boucle. C'est légal mais probablement pas ce que vous voulez, sinon vous lisez juste la même feuille 10 fois.

Vous pouvez utiliser foreach ici, mais vos deux boucles sont plus faciles avec forval.

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

Nécessairement, je ne peux pas vérifier cela. Pourquoi vous écrivez 10 pas 60 n'est pas clair. Produire 240 fichiers .dta séparés vous laissera juste besoin d'une stratégie sur la façon de les combiner, mais ce serait une question distincte.

+0

Merci, je courais 1/10 pour faire un essai. Merci pour le conseil forval, j'ai regardé de vieux codes le gars précédent a écrit et c'était tout "foreach". :) –