二度も三度も同じことやってられないから。忘れちゃいけないから。
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ただいまコメントを受けつけておりません。
久しぶりにliteratureじゃないエントリ。Stataのdoファイルにたくさんregressionを書いたとき、ループを使っていろんなoutcome variableに対して異なるspecificationや異なる年度の結果をバッ!ととりあえず!見たいことがあるのに、ある特定のspecificationでエラーがあったりしてループ全体が止まっていて、そのあとのループのコマンドを何も実行してくれないことがある。かなりイラつくことがある。相当むかつくことがある。そんな時のための備忘録。
動作環境は 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==2002"がエラーになるのは周知のとおり。だが実際には、とりあえず見てみたいのだから、このエラーをすっ飛ばして2004年、2006年、...さらにy3のregressionもやってほしいところ。データをなんとか補正するのは後で考える!
regress y2 x1 x2 if year==2000
そんなとき、下記のようにコマンドをちょっと書き換える。
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のあと、コマンドを書く直前に : (コロン)が必要。これを忘れていたため、書き足した。