关于Stata中的捕获

时间:2016-06-17 15:51:50

标签: append stata

我的代码主要是从这里开始的(下栏):http://www.ats.ucla.edu/stat/stata/faq/append_many_files.htm

clear
file open myfile9 using C:\Users\RNCZF01\Documents\Cameron-Fen\Economics-Projects\Neighborhood-Project\list.csv, read
file read myfile9 line
insheet using `line', comma

save `line'.dta, replace
save master_data.dta, replace

drop _all

file read myfile9 line
while r(eof)==0 {
    capture insheet using `line', comma
    if _rc!=0 {
        insheet using `line', comma
        save `line'.dta, replace
        append using master_data.dta, force
        save master_data.dta, replace
    }
    drop _all
    file read myfile9 line
}

最初我有insheet using line', comma(我删除了行之前的勾号,因为它干扰了格式化)。但问题是我试图阅读的一些床单是空白的,所以Stata会关闭。因此,我改变了这一点:

capture insheet using `line', comma
    if _rc!=0 {
        insheet using `line', comma

然而,在仅读取第一个文档之后关闭(并且在while循环(第二个文档)的第一次迭代完成之前退出while循环)。我的想法是,宏在使用时可能会消失,但我不知道。

1 个答案:

答案 0 :(得分:0)

你的循环关闭的原因是因为你想要

if _rc==0

表示内循环。我猜你的第一个文件没找到,insheet抛出一个错误,你正在触发if _rc!= 0条件。然后循环尝试运行insheet而没有捕获和错误。另一种诊断方法是运行

set trace on

我发现在这种情况下有帮助。

P.S。不确定礼仪,但这个答案归功于lmo。我只是觉得写作答案而不是评论是值得的。