忍者ブログ

mnblog

二度も三度も同じことやってられないから。忘れちゃいけないから。

0x20150921 Stata Command - LOOP内のエラーを回避

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

0x20150921 Stata Command - LOOP内のエラーを回避

Loop内に発生するエラーでLoopがすべて終了してしまう

久しぶりにliteratureじゃないエントリ。Stataのdoファイルにたくさんregressionを書いたとき、ループを使っていろんなoutcome variableに対して異なるspecificationや異なる年度の結果をバッ!ととりあえず!見たいことがあるのに、ある特定のspecificationでエラーがあったりしてループ全体が止まっていて、そのあとのループのコマンドを何も実行してくれないことがある。かなりイラつくことがある。相当むかつくことがある。そんな時のための備忘録。


使うのはcapture

動作環境は Windows 7 professional 64bit 上の Stata Special Edition 14 ということになっている。自分で金出して買ったわけじゃないので Special Edition ってなにー状態。

たとえばこんな風なregressionのパターンを試してみたいとする。

foreach y of varlist y1 y2 y3 y4 y5 y6 y7 y8 y9 y10 {
forvalues yyyy=2000(2)2010 {
regress `y' x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 if year==`yyyy'
}
}

ここで、たとえば2002年のy2になんかのミスがあったりして、値がmissingだったりすると、実際にregressコマンドを実行してくれるのは下記のパターンのみになってしまう。

regress y1 x1 x2 if year==2000, 2002, 2004, 2006, 2008, 2010
regress y2 x1 x2 if year==2000
もちろん、"regress y2 x1 x2 if year==2002"がエラーになるのは周知のとおり。だが実際には、とりあえず見てみたいのだから、このエラーをすっ飛ばして2004年、2006年、...さらにy3のregressionもやってほしいところ。データをなんとか補正するのは後で考える!

そんなとき、下記のようにコマンドをちょっと書き換える。

foreach y of varlist y1 y2 y3 y4 y5 y6 y7 y8 y9 y10 {
forvalues yyyy=2000(2)2010 {
capture noisily: regress `y' x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 if year==`yyyy'
}
}

ポイントは、captureだけ使うと回帰の結果が全く見えなくなってしまうが、リターンコードだけcaptureしておいて計算結果はnoisilyによって普通に出力する、としておくこと。これにより、解決した気分になれる。

追記(20160113):capture noisilyのあと、コマンドを書く直前に : (コロン)が必要。これを忘れていたため、書き足した。

PR

コメント

プロフィール

HN:
golbnm
性別:
非公開

P R