Ein ado-file ist im Prinzip ein do-file, das ein (oder mehr) Programm/e definiert. Viele Stata Befehle sind als ado-files implementiert (z.b. -recode-). Ein Fachfremder könnte also dein ado-file genau wie jeden anderen Stata Befehl aufrufen. Je nachdem wie Fachfremd derjenige ist, ist ein ado-file, mit zugehörigem help file sicher sinnvoll. Der aufwändige Part kommt dann ins Spiel, wenn
ein fachfremder diese Arbeit ohne viel nachzudenken ausführen
(meine Hervorhebung)
soll. Je weniger der user nachdenken muss, bzw. je weniger der user weiß, wie genau das Programm tut, was es tut, desto höher der Aufwand mögliche Eingabefehler zu antizipieren und abzufangen.
Mein code könnte die Basis für ein solches Progamm darstellen. Die Fehleranfälligkeit kann (minimal) verbessert werden, indem das Ergebnis des -mere-ens geprüft wird. Statt
- Code: Alles auswählen
mer 1:1 <id vars> using `"<merged path>/merged.dta"' ///
,nogen
könnte man z.B.
- Code: Alles auswählen
mer 1:1 <id vars> using `"<merged path>/merged.dta"' ///
,nogen assert(3)
schreiben. So wird sichergestellt, dass alle Fällle, die im bereits gespeicherten file sind, auch im neu anzuhängenden file vorhanden sind.
Ich würde das Problem allerdings, wie Du andeutets vielleicht in zwei Schritte unterteilen. Hier ist ein einfaches Programm für Schritt 1.
- Code: Alles auswählen
*! version 1.0.0 06sep2012 Daniel Klein
pr impxlsfolder
vers 12.1
syntax using/ [, SAve(str) replace EXTension(str) clear * ]
// set options
if ("`clear'" == "") loc clear clear
if (`"`save'"' == "") loc save `using'
if (`"`extension'"' == "") loc extension .xls
else if !(inlist(`"`extension'"', ".xls", ".xlsx")) {
di as err "extension must be one of .xls or .xlsx"
e 198
}
// get working directory and check directories
loc pwd `c(pwd)'
qui cd "`using'"
qui cd "`pwd'"
qui cd "`save'"
qui cd "`pwd'"
// get all files in target folder
loc allf : dir "`using'" file "*`extension'"
// import and save as .dta
preserve
foreach f of loc allf {
import excel using "`using'/`f'" ,clear `options'
gettoken fn : f ,p(".")
sa "`save'/`fn'.dta" ,`replace'
}
end
Den code in einen do-file Editor kopieren und unter c:/ado/impxlsfolder.ado oder c:/ado/plus/i/impxlsfolder.ado speichern. In Stata -discard- tippen. Der Befehl -impxlsfolder- kann nun verwendet werden. Die Syntax lautet
impxlsfolder using ["]
filename["] [,
save(
path) replace
extension(
ext)
import excel options ]
filename ist das Verzeichnis, in dem die Excel Dateien liegen.
Die Option ...
save(
path) spezifiziert das Verzeichnis, in dem die .dta Dateien gespeichert werden. Fall nicht angegeben wird das Verzeichnis, in dem die Excel Datein liegen verwendet. Anführungszeichen sind nicht nötig.
replace erlaubt das Überschreiben bereits vorhandener .dta Dateien.
extension(
ext) spezifiziert die Excell Dateierweiterung.
ext kann entweder .xls (default) oder .xlsx sein.
import excel options sind alle Optionen, die bei import excel erlaubt sind.
Du würdest also tippen
- Code: Alles auswählen
impxlsfolder using "<input path>" ,sa(<output path>) ,first
Es wäre sinnvoll ein help file anzulegen, dass die Syntax und Optionen erklärt, dazu habe ich aber gerade keine Zeit.
Für Schritt 2 schau mal unter
. findit mmerge
oder
. findit mergemany
nach. Vielleicht ist da was passendes dabei.
Stata is an invented word, not an acronym, and should not appear with all letters capitalized: please write “Stata”, not “STATA”.