たくさんの変数に同じ処理を繰り返したいとき
たとえば,100個の変数について性別とのクロス表をいっぺんに出したいという
状況があるとします。以下,Stata12.0で説明します。
性別の変数sexと変数a1 a2 a3 ・・・ a100とあったとき,
クロス表を書くコマンドは,
と100行にわたってしまいます。でも100行も書いてられないですよね。
実はこれは1行で書くことができます。
これは,for varlistの後におかれた一連の変数について,その後のXに代入して処理を
繰り返してくれるコマンドです。
a1-a100というのは,連番を意味していて,-(ハイフン)でつながれた間の変数
もすべて含めてくれるので,100個も変数を並べなくて大丈夫です。
もし並べたい場合は,a1 a2 a3 ・・・ a100とスペースを入れて並べます。
このようにfor~ というコマンドは便利なのですが,最近はout of dateだ
そうで,ヘルプにも詳しく書かれておりません。
もしかしたらいずれ使えなくなってしまうかもしれません。
それでは,今後を見据えて最新のコマンドではどう書くようになっているか
というと,最低でも3行必要なように変わっているようです。
または,
です。
これは,foreachの後に置かれた文字や単語(なんでもよい)に一連の変数を
代入してくれるという意味です。for~との違いは,代入先が柔軟になったと
いうところでしょうか。
気をつけなければいけないのは,{ と } の位置は必ず上記の通りに
決まっていること,また` ' という初めての人には見慣れない記号がある
ことです。これらは,
a left quote ( ` )
a right quote ( ' )
という名前のようで,自分の環境だと,半角の状態でshift押しながら@と7キーを押す
と出てきました。
ここでやっていることは,英語ではloopingというみたいです。
検索すると大体この言葉と一緒にひっかかってきます。
これらの動きが分かってくると,一気にStataへの親しみがわいてきます。
(2015/04/06 追記)
■数値のみを繰り返したい時
これは,forvaluesを使います。下記の記事参照。
線形回帰のメモ (いわゆる単回帰分析,重回帰分析)
の,(5)グループごとの回帰(層別)で実行例あり。
(2015/05/07 追記)
また応用編として↓も
連続して変わる数値の繰り返し処理を入れ子で実行する(double loop)
変更履歴
2013/11/17 度数分布表→クロス表に修正
2015/04/06 forvaluesの例追記
2015/05/07 リンク追記,foreachのコマンド例に,クロス表の例として一貫するようsexを追記
状況があるとします。以下,Stata12.0で説明します。
性別の変数sexと変数a1 a2 a3 ・・・ a100とあったとき,
クロス表を書くコマンドは,
tab sex a1
tab sex a2
tab sex a3
・
・
・
tab sex a100
tab sex a2
tab sex a3
・
・
・
tab sex a100
と100行にわたってしまいます。でも100行も書いてられないですよね。
実はこれは1行で書くことができます。
for varlist a1-a100: tab sex X
これは,for varlistの後におかれた一連の変数について,その後のXに代入して処理を
繰り返してくれるコマンドです。
a1-a100というのは,連番を意味していて,-(ハイフン)でつながれた間の変数
もすべて含めてくれるので,100個も変数を並べなくて大丈夫です。
もし並べたい場合は,a1 a2 a3 ・・・ a100とスペースを入れて並べます。
このようにfor~ というコマンドは便利なのですが,最近はout of dateだ
そうで,ヘルプにも詳しく書かれておりません。
もしかしたらいずれ使えなくなってしまうかもしれません。
それでは,今後を見据えて最新のコマンドではどう書くようになっているか
というと,最低でも3行必要なように変わっているようです。
foreach x of varlist a1-a100 {
tab sex `x'
}
tab sex `x'
}
または,
foreach x in a1-a100 {
tab sex `x'
}
tab sex `x'
}
です。
これは,foreachの後に置かれた文字や単語(なんでもよい)に一連の変数を
代入してくれるという意味です。for~との違いは,代入先が柔軟になったと
いうところでしょうか。
気をつけなければいけないのは,{ と } の位置は必ず上記の通りに
決まっていること,また` ' という初めての人には見慣れない記号がある
ことです。これらは,
a left quote ( ` )
a right quote ( ' )
という名前のようで,自分の環境だと,半角の状態でshift押しながら@と7キーを押す
と出てきました。
ここでやっていることは,英語ではloopingというみたいです。
検索すると大体この言葉と一緒にひっかかってきます。
これらの動きが分かってくると,一気にStataへの親しみがわいてきます。
(2015/04/06 追記)
■数値のみを繰り返したい時
これは,forvaluesを使います。下記の記事参照。
線形回帰のメモ (いわゆる単回帰分析,重回帰分析)
の,(5)グループごとの回帰(層別)で実行例あり。
(2015/05/07 追記)
また応用編として↓も
連続して変わる数値の繰り返し処理を入れ子で実行する(double loop)
変更履歴
2013/11/17 度数分布表→クロス表に修正
2015/04/06 forvaluesの例追記
2015/05/07 リンク追記,foreachのコマンド例に,クロス表の例として一貫するようsexを追記