2

我想删除或删除 .do 文件中的临时文件的内容,以节省内存。我知道该文件应该在 .do 文件完成后被清除,但我想知道是否可以在不再需要内容后中途删除它。

想到的就是打开文件。删除所有观察结果(我先验地知道文件大小的上限)。然后进行保存替换以减小文件的大小。虽然这可行,但我怀疑它是最有效的解决方案,因为它需要打开一个可能很大的文件,大致知道文件的大小,并且文件继续存在,尽管只有少量。

这是我为删除临时文件而生成的代码:

  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
  }
4

2 回答 2

2

如果您确实需要删除临时文件,只需使用erase. erase是 Stata 用于跨平台删除文件的命令。自然,Stata 会与任何操作系统进行对话以执行此操作。

您的代码假定临时文件将是 Stata.dta文件,而不是 Stata 做出的假设。但这是一个细节:你不需要任何如此奇异或迂回的东西。

于 2013-06-26T18:11:16.423 回答
0

删除临时文件没有意义。它们在您的硬盘驱动器上,而不是在您的内存中,因此,如果有的话,将命令发送到操作系统以对该文件执行任何操作(use, erase,ls等)对您的计算时间来说是不必要的,特别是如果您有 20M 观察即使在最快的服务器上加载也需要几秒钟。我在删除临时文件时看到的唯一原因是,如果您在一个使用配额非常严格的网络上,并且每个临时文件都占用了您剩余配额的一半——换句话说,在保存时`temp2'可能会使您超出配额并产生您本来可以避免的错误消息。如果您不在这种情况下,您可以保留这些文件。Stata 会比您自己更好地清理这些文件。

于 2013-06-27T18:05:18.023 回答