¿Cómo tokenizar una macro extendida (local: dir)?
Sé que mi título es confuso en el sentido de que eltokenize
El comando se especifica en una cadena.
Tengo muchas carpetas que contienen archivos de Excel masivos, separados y mal nombrados (la mayoría de ellos se eliminan del sitio web). Es inconveniente seleccionarlos manualmente, así que necesito confiar en la función de macro extendida de Statalocal :dir
para leerlos
Mi código se ve de la siguiente manera:
foreach file of local filelist {
import excel "`file'", clear
sxpose, clear
save "`file'.dta", replace
}
Tal código generará muchos nuevosdta
archivos y el directorio está lleno de estos archivos. Prefiero crear un único archivo de datos nuevo para el primeroxlsx
archivo y luegoappend
otros a ella dentro de laforeach
lazo. Entonces, esencialmente, hay unif-else
dentro del bucle.
Necesitamos un índice de la macro.filelist
recién creado, para que podamos escribir algo como:
token `filelist' // filelist is created in the former code
if "`i'" == `1' {
import excel "`file'",clear
}
else {
append using `i',clear
}
Sé que mi código es ineficiente y propenso a errores: la sintaxis de expresióntoken 'filelist'
es incorrecto también (dado quefilelist
no es una cadena) Sin embargo, todavía quiero descubrir la estructura básica detrás de mi pseudocódigo.
¿Cómo podría corregir mi código y hacerlo funcionar?
Otro enfoque más eficiente es muy bienvenido.