Stata:附加多个文件并从文件名中提取变量

时间:2013-09-05 12:39:40

标签: stata

我有114个扩展名为.dat的文件转换为Stata / SE并追加,包含大量变量(从81到16800不等)。我已将最大变量数重置为32000(set maxvar 32000),增加了内存(set mem 500m)并且我使用以下算法来组合大量文件并通过提取文件的部分来生成多个变量姓名:http://www.ats.ucla.edu/stat/stata/faq/append_many_files.htm

代码如下:

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解决?

1 个答案:

答案 0 :(得分:3)

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

我唯一的建议是在append循环中放入一些可以帮助你调试的命令:

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

这将做两件事:确保你的变量在每次新附加后都存在(你的第一顺序关注点),并检查它们是否永远不是空白(不是你所说的关注,而是一个好的检查)。

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