Wie kann ein erweitertes Makro getokenet werden (local: dir)?
Ich weiß, mein Titel ist in dem Sinne verwirrend, dass dietokenize
er Befehl @ ist für eine Zeichenfolge angegeben.
Ich habe viele Ordner, die massive, getrennte, falsch benannte Excel-Dateien enthalten (die meisten sind von der Website entfernt). Es ist unpraktisch, sie manuell auszuwählen, daher muss ich mich auf die erweiterte Stata-Makrofunktion verlassen.local :dir
, um sie zu lesen.
Mein Code sieht wie folgt aus:
foreach file of local filelist {
import excel "`file'", clear
sxpose, clear
save "`file'.dta", replace
}
Solcher Code generiert viele neuedta
files und das Verzeichnis ist also voll von diesen Dateien. Ich ziehe es vor, eine einzelne neue Datendatei für das erste @ zu erstellexlsx
Datei und dannappend
Andere dazu imforeach
loop. Also im Wesentlichen gibt es einif-else
in der Schleife.
Wir brauchen einen Index des Makrosfilelist
gerade erstellt, damit wir so etwas schreiben können:
token `filelist' // filelist is created in the former code
if "`i'" == `1' {
import excel "`file'",clear
}
else {
append using `i',clear
}
Ich weiß, mein Code ist ineffizient und fehleranfällig: die Syntax des Ausdruckstoken 'filelist'
ist auch falsch (vorausgesetzt, dassfilelist
ist kein String). Ich möchte jedoch immer noch die Grundstruktur hinter meinem Pseudocode herausfinden.
Wie kann ich meinen Code korrigieren und zum Laufen bringen?
in weiterer effizienterer Ansatz ist sehr zu begrüße