我有 114 个扩展名为 Stata/SE .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_directoryProducts_batchfilelist.txt
file open myfile using "d:Stata_directoryProducts_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 解决?
我没有看到会导致这种情况的代码存在明显问题。这可能与 SE 中的限制有关,但在我看来这仍然不太可能(如果命令执行的操作超过 maxvar
,您会看到错误)。
我唯一的建议是在追加循环中放置几个命令,以帮助您进行调试:
save `line'.dta, replace
append using Products_merged.dta
assert m!="" & n!="" & playersnum!=""
save Products_merged.dta,replace
这将做两件事:确保你的变量在每个新追加后存在(你的一阶关注点),并检查它们是否永远不为空(不是你所说的关注点,但无论如何都是一个很好的检查)。
如果你发布几个文件,我可能会给出更好的答案。