2016-06-17 11 views
0

でのキャプチャについて:http://www.ats.ucla.edu/stat/stata/faq/append_many_files.htmは、私はほとんどここから取ったコード(下段)はStataの

clear 
file open myfile9 using C:\Users\RNCZF01\Documents\Cameron-Fen\Economics-Projects\Neighborhood-Project\list.csv, read 
file read myfile9 line 
insheet using `line', comma 

save `line'.dta, replace 
save master_data.dta, replace 

drop _all 

file read myfile9 line 
while r(eof)==0 { 
    capture insheet using `line', comma 
    if _rc!=0 { 
     insheet using `line', comma 
     save `line'.dta, replace 
     append using master_data.dta, force 
     save master_data.dta, replace 
    } 
    drop _all 
    file read myfile9 line 
} 

をもともと私は(それがフォーマットに干渉したため、私はラインの前に戻ってダニを取り除い)insheet using line', commaを持っていました。しかし、問題は、私が読もうとしていたシートの一部が空白であったため、スタータが閉じてしまうことでした。

capture insheet using `line', comma 
    if _rc!=0 { 
     insheet using `line', comma 

しかし、これは(whileループ(第2の文書)の最初の反復が行われる前に、whileループにして終了)のみ最初の文書を読んだ後閉じます。したがって、私はこれにすることを変更しました。マクロを使用するとマクロが消えるかもしれないと思っていましたが、わかりません。

+1

Stata 13または14をお持ちの場合は、 'insheet'ではなく' import delimited'を使用してください。新しいコマンドははるかに柔軟です。 – lmo

+2

また、 'if _rc == 0'が必要なのは、' insheet'中にエラーが発生しなかったことを示しているからです。 – lmo

+0

@lmpは 'import delimited'を推奨しています。マクロを使用しても、マクロは消えません。それ以外の場合は、オペレーティングシステムを使って空のファイルを調べてみてはどうでしょうか? –

答えて

0

あなたは内側のループのための

if _rc==0 

をしたいので、あなたのループが閉じている理由があります。あなたの最初のファイルが見つからないと思いますが、insheetはエラーをスローし、if _rc!= 0の条件をトリガーしています。次にループはキャプチャとエラーなしでinsheetを実行しようとします。これを診断するもう1つの方法は、このような状況で役立つと思われるものを実行することです。

set trace on 

P.S.エチケットは確かではありませんが、この回答のクレジットは映画監督に任せられます。私はちょうどそれがコメントではなく答えとして書く価値があると思った。

関連する問題