我试图打开我目录中找到的所有.dta文件,将年份变量制成表格,检查数据提供商是否发送了我所请求的所有年份,并找到不在的文件。 t包含年份变量以进行更仔细的检查。到目前为止,我已经尝试过这个:
local files: dir "$new" files "*dta"
foreach file in `files' {
local file: subinstr local file ".dta" ""
use "$new\\`file'", clear
if acadyr in `files' {
di "`file'"
tab acadyr, m
di " "
}
else if _rc==111 {
di "YEAR VAR NOT IN: `file'"
ds
di " "
}
}
我得到error not found
。我可以通过使用if else
来避免使用capture
,但之后没有任何内容列表。有没有办法创建一个条件,如果发生错误我会执行x但是如果找不到则继续?在python中,这可以使用try
和except
完成,但我不知道如何在Stata中执行此操作,这是我必须用于此项目的内容。
答案 0 :(得分:0)
我发现了一个回答我问题的statalist问题。我会发布我的答案以澄清任何混淆,如果有其他人遇到这个问题。
local files: dir "$new" files "*dta"
foreach file in `files' {
use "$new\\`file'", clear
capture confirm variable acadyr
if !_rc {
di "`file'"
tab acadyr, m
di " "
}
else {
di "YEAR VAR NOT IN: `file'"
ds
di " "
}
}
答案 1 :(得分:0)
这可能会有所帮助。一些小细节:
在感兴趣的目录中工作。
消除.dta
后缀没有明显的意义。
cd $new
local files: dir . files "*dta"
foreach file of local files {
use "`file'", clear
di "`file'"
capture confirm variable acadyr
if _rc display "acadyr not found"
else tab acadyr, m
di
}