我想删除或删除.do文件中的临时文件的内容,以节省内存。我知道该文件应该在.do文件完成时清除,但我想知道是否可以在不再需要它之后中途删除它们。
想到的是打开文件。删除所有观察结果(我先知道文件大小的上限)。然后执行save-replace以减小文件的大小。虽然这有效,但我怀疑它是最有效的解决方案,因为它需要打开一个可能很大的文件,大致知道文件的大小,文件仍然存在,尽管只是少量。
这是我为删除临时文件而生成的代码:
tempfile temp1 temp2
/* LOTS OF CODE HERE */
clear
set mem 1197m
foreach X in temp1 temp2 {
clear
set mem 1197m
use "``X''"
drop if _n <= 20000000
save "``X''", replace
}
答案 0 :(得分:2)
如果您确实需要删除临时文件,请使用erase
。 erase
是Stata用于跨平台删除文件的命令。当然,Stata会与任何操作系统进行对话。
您的代码假定临时文件将是Stata .dta
文件,而不是Stata所做的假设。但这是一个细节:你不需要任何奇怪或圆形的东西。
答案 1 :(得分:0)
删除临时文件没有意义。它们在您的硬盘上,而不在您的内存中,所以如果有的话,将命令发送到操作系统以对该文件执行任何操作(use
,erase
,ls
,等等)对您的计算时间造成不必要的损失,特别是如果您有20M的观察结果,即使在最快的服务器上也需要几秒钟的时间。我在删除临时文件时可以看到的唯一原因是,如果您使用的网络具有非常严格的使用配额,并且每个临时文件占用剩余配额的一半 - 换句话说,保存`temp2'
时可能抛出配额并产生一条错误消息,否则你可以避免。如果你不是那种情况,你可以留下这些文件。 Stata会比你自己更好地清理这些文件。