9

これに簡単な答えがどこかにある場合は、事前にお詫び申し上げます。そのようなもののように思えますが、SO を検索したり、グーグルで検索したりしても、ヘルプ ファイルで見つけることができないようです。

現在、数GBのデータセットをいくつか扱っています。私がアクセスできるクラスタ ノードの 1 つのメモリに収まるには十分ですが、ロードにはかなりの時間がかかります。このデータを使用した多くのデバッグ/プログラミング アクティビティでは、ファイル全体をロードする必要はありません。コードをテストするためのデータセットを取得するには、最初の数千の観測のみをロードする必要があります。もちろん、ファイル全体を読み込んでサブセット化することもread.dta()できますが、最初の N 行のみを読み込むように指示する方法があるかどうか疑問に思っていました。もちろん、これははるかに高速です。

.csv のような適切な形式を使用してread.csv()から の nrows 引数を使用することもできますが、その場合、Stata データセットの因子ラベルが失われます (そして、データにフィードしている他の誰かのコードからかなりの数 GB のデータを再作成する必要があります)。このプロジェクト.したがって、.dta ファイルの直接的な解決策が推奨されます。

4

3 に答える 3

9

Stata のバイナリ ファイルは行ごとに書き込まれるため、R_LoadStataData関数を変更してstataread.c読み込む行数を制限することができます。ただし、これは値ラベルが必要ない場合にのみ機能します。ファイル全体を読み取る必要があり、時間の節約にはなりません。

于 2011-04-11T13:45:33.350 に答える
7

do_readStata内部の関数はコンパイルされたコードであり、ファイル全体を取り込むことしかできないため、これは難しいものになるでしょう。一般的に、バイナリ ファイルは 1 行ずつ読み取るのが難しく.dta、バイナリ形式であると思います。また、R のネイティブ バイナリ形式では、読み込み中にデータセットから多数の行を選択することはできません。

私の謙虚な意見では、Stata 内から一連のテスト ファイルを作成し (たとえば、Stata コードsample 1000, countは、読み込まれたデータセットから 1000 個の観測値のサンプルを提供します)、それらを使用する方がよいでしょう。また、Stata にアクセスできない場合は、プロジェクトの他の誰かが代わりにアクセスできるはずです。

于 2011-04-11T13:12:18.350 に答える
1

Joris Meys 氏のフォローアップ: この種の場合、「テスト」データ セットと「実際の」データ セットをそれぞれ別のフォルダーに使用します。(1) データのサンプルを取得し、(2) どちらか一方を含む適切なフォルダーに入力/出力をポイントするために、.do ファイルの先頭にマクロを保持します (以下の if/then ステートメントを使用)。私はおそらくプロジェクトごとに異なる方法をとっていますが、次のようなものです。

データ作成.doファイル

blah blah blah 
save                  using data/myfile.dta
save if uniform()<.05 using test_data/myfile.dta   // or bsample, then save for panel data

分析 .do ファイル

local test = "test_"   
// when you're ready to run the file with all the data, use the following 
// local test = ""

use `test'data/myfile.dta
blah blah blah 
outreg2 ... using `test'output/mytable.txt
于 2011-04-12T13:37:26.377 に答える