2

我有 114 个带有 .dat 扩展名的文件要转换为 Stata/SE 并附加,其中包含大量变量(从 81 到 16800 不等)。我已将最大变量数重置32000 set maxvar 32000ucla.edu/stat/stata/faq/append_many_files.htmset mem 500m

代码如下所示:

cd "C:\Users\..."
! dir *.dat /a-d /b >d:\Stata_directory\Products_batchfilelist.txt


file open myfile using "d:\Stata_directory\Products_batchfilelist.txt", read
file read myfile line
drop _all
insheet using `line', comma names



gen n = substr("`line'",10,1)
gen m = substr("`line'",12,1)
gen playersnum = substr("`line'",14,1)


save Products_merged.dta, replace

drop _all
file read myfile line

while r(eof)==0 {
    insheet using `line', comma names
    gen n = substr("`line'",10,1)
    gen m = substr("`line'",12,1)
    generate playersnum = substr("`line'",14,1)

    save `line'.dta, replace
    append using Products_merged.dta
    save Products_merged.dta,replace
    drop _all
    file read myfile line
}

问题是,虽然n,m,playersnum从文件名中提取的变量存在于每个单独的文件中,但它们在最终的“Products_merged.dta”文件中消失了。谁能告诉我可能是什么问题以及是否可以使用 Stata/SE 解决?

4

1 回答 1

3

我没有看到导致这种情况的代码存在明显问题。它可能与 SE 中的限制有关,但在我看来这仍然不太可能(如果命令执行超出的操作,您会看到错误maxvar)。

我唯一的建议是在 append 循环中放置几个​​命令来帮助您调试:

save `line'.dta, replace
append using Products_merged.dta
assert m!="" & n!="" & playersnum!=""
save Products_merged.dta,replace

这将做两件事:确保您的变量在每个新追加之后都存在(您的一阶关注点),并检查它们永远不会为空(不是您声明的关注点,但无论如何都是一个很好的检查)。

如果您发布几个文件,我可能会给出更好的答案。

于 2013-09-05T14:59:22.660 回答