データ分析において、同じ処理を複数回繰り返したいことがよくあります。Stataには効率的にループ処理を行うための`forval`と`foreach`という2つの便利なコマンドがあります。今回は初心者向けに、この2つのループコマンドの基本的な使い方を解説します。 ## コード例とその実行結果 まずは今回紹介する全体のコードを見てみましょう。このコードはそのままStataにコピー&ペーストして実行できます。 ```stata * 例 1 forval i = 1/5{ di `i' } * 例 2 clear all sysuse auto sum price sum weight sum length foreach var of varlist price weight length{ sum `var' } ``` **実行結果:** 例 1の結果: ``` 1 2 3 4 5 ``` 例 2の結果: ``` (各変数の詳細な記述統計が表示されます) Variable | Obs Mean Std. dev. Min Max ---------+---------------------------------------------------------- price | 74 6165.257 2949.496 3291 15906 Variable | Obs Mean Std. dev. Min Max ---------+---------------------------------------------------------- weight | 74 3019.459 777.1936 1760 4840 Variable | Obs Mean Std. dev. Min Max ---------+---------------------------------------------------------- length | 74 187.9324 22.26634 142 233 (foreachによる繰り返し処理で同じ結果が3回表示されます) ``` ## 例 1:forvalコマンドの詳細解説 ```stata forval i = 1/5{ di `i' } ``` **forvalコマンドの基本構造** `forval`は数値の範囲を指定してループを実行するコマンドです。構文は以下の通りです: `forval ローカルマクロ名 = 開始値/終了値 { 実行したいコマンド }` このコードでは: - `i`がローカルマクロ名(カウンター変数) - `1/5`で1から5までの範囲を指定 - `di` i'`で現在のiの値を表示(`di`はdisplayコマンドの省略形) **ローカルマクロについて** ``i'`の部分に注目してください。Stataでは、ローカルマクロの値を参照する際にバッククォート(`)とアポストロフィ(')で囲みます。これにより、Stataは`i`に格納されている値(1, 2, 3, 4, 5)を順番に取り出して使用します。 **forvalを使う場面** - 数値の範囲でループしたい場合 - 回数を指定して処理を繰り返したい場合 - インデックス番号が必要な場合 ## 例 2:foreachコマンドの詳細解説 ```stata clear all sysuse auto sum price sum weight sum length foreach var of varlist price weight length{ sum `var' } ``` **データの準備** まず`clear all`でメモリをクリアし、`sysuse auto`でStataに標準で含まれている自動車データセットを読み込みます。このデータセットには価格(price)、重量(weight)、長さ(length)などの変数が含まれています。 **手動での処理(比較用)** ```stata sum price sum weight sum length ``` これらの3行は、各変数に対して個別に記述統計(`sum`コマンド)を実行しています。同じような処理を3回繰り返していることがわかります。 **foreachによる効率的な処理** ```stata foreach var of varlist price weight length{ sum `var' } ``` **foreachコマンドの基本構造** `foreach`は変数のリストや値のリストに対してループを実行するコマンドです。`of varlist`を使った構文は: `foreach ローカルマクロ名 of varlist 変数名のリスト { 実行したいコマンド }` このコードでは: - `var`がローカルマクロ名(現在処理中の変数名を格納) - `of varlist price weight length`で処理したい変数のリストを指定 - `sum` var'`で現在の変数に対して記述統計を実行 **処理の流れ** 1回目:`var`に"price"が格納され、`sum price`が実行される 2回目:`var`に"weight"が格納され、`sum weight`が実行される 3回目:`var`に"length"が格納され、`sum length`が実行される **foreachを使う場面** - 複数の変数に対して同じ処理を行いたい場合 - 変数名のリストが決まっている場合 - データセット内の変数を効率的に処理したい場合 慣れてきたら、より複雑な条件分岐と組み合わせたり、ネストしたループ(ループの中にループ)なども試してみてください。Stataでのデータ分析がより効率的になるはずです。