2

Stata/SE に変換して追加する .dat 拡張子を持つ 114 個のファイルがあり、かなりの数の変数 (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_directory\Products_batchfilelist.txt


file open myfile using "d:\Stata_directory\Products_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 で解決できるかどうか教えてもらえますか?

4

1 に答える 1

3

これを引き起こしているコードに明らかな問題は見当たりません。SEの制限と関係があるかもしれませんが、それは私の考えではまだありそうにありません(コマンドが何かを超えるとエラーが表示されますmaxvar)。

私の唯一の提案は、デバッグに役立つ追加ループ内にいくつかのコマンドを配置することです。

save `line'.dta, replace
append using Products_merged.dta
assert m!="" & n!="" & playersnum!=""
save Products_merged.dta,replace

これにより、次の 2 つのことが行われます。新しい追加のたびに変数が存在することを確認し (最初の関心事)、変数が空白にならないことを確認します (前述の懸念事項ではありませんが、とにかく適切なチェックです)。

いくつかのファイルを投稿すると、おそらくより良い答えが得られるでしょう。

于 2013-09-05T14:59:22.660 に答える