Как токенизировать расширенный макрос (локальный: dir)?
Я знаю, что мое название сбивает с толку в том смысле, чтоtokenize
Команда указана для строки.
У меня есть много папок, которые содержат массивные, отдельные, плохо названные файлы Excel (большинство из них скопированы с веб-сайта). Их неудобно выбирать вручную, поэтому мне нужно полагаться на расширенную макро-функцию Stata.local :dir
читать их.
Мой код выглядит следующим образом:
foreach file of local filelist {
import excel "`file'", clear
sxpose, clear
save "`file'.dta", replace
}
Такой код будет генерировать много новогоdta
файлы и каталог, таким образом, полон этих файлов. Я предпочитаю создать один новый файл данных для первогоxlsx
файл, а затемappend
другие к нему внутриforeach
петля. Так по сути, естьif-else
внутри петли.
Нам нужен индекс макросаfilelist
только что создали, так что мы можем написать что-то вроде:
token `filelist' // filelist is created in the former code
if "`i'" == `1' {
import excel "`file'",clear
}
else {
append using `i',clear
}
Я знаю, что мой код неэффективен и подвержен ошибкам: синтаксис выраженияtoken 'filelist'
тоже неверно (учитывая, чтоfilelist
это не строка). Тем не менее, я все еще хочу выяснить базовую структуру моего псевдокода.
Как я могу исправить свой код и заставить его работать?
Другой более эффективный подход приветствуется.