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

一時ファイルを削除しても意味がありません。それらはメモリではなくハードドライブ上にあるため、どちらかといえば、コマンドをオペレーティングシステムに送信してそのファイル(useerasels、何でも)を処理することは、特に20Mの観測がある場合、計算時間に不必要な負担をかけます。最速のサーバーでもロードに数秒かかります。一時ファイルを削除する唯一の理由は、使用制限が非常に厳しいネットワーク上にいて、すべての一時ファイルが残りの割り当ての半分を占めている場合です。つまり、保存時に`temp2'クォータを超えて、他の方法では回避できたはずのエラー メッセージが表示される可能性があります。そのような状況でない場合は、これらのファイルをそのままにしておくことができます。Stata は、ユーザーが自分で行うよりも、後でこれらのファイルをきれいに処理します。

于 2013-06-27T18:05:18.023 に答える