[Stata][egen]Stataのegen rowtotalで変数を作るときの注意点

blurry photo of a neon signage stata
Photo by . . on Pexels.com

egen rowtotal

https://www.stata.com/manuals/degen.pdf

egenは便利なコマンドであるが、思わぬ落とし穴にハマることもある。

例題データセット

GitHubにcsvをアップロードしたので、こちらを利用。

stata/egen.csv at main · denovo2021/stata
Contribute to denovo2021/stata development by creating an account on GitHub.
insheet using https://raw.githubusercontent.com/denovo2021/stata/main/egen.csv, clear

で読み込むと、以下のようなデータセットが出てくる。

データセットの読み込み。

何回かテストを行ったというものであるが、注意すべきは欠損値があることで、ID 3の人は2回目、3回目を受けておらず、ID 7の人は3回目を受けてない。また、ID 5の人は3回目は受けてはいるが、0点である。

egen rowtotalを使うと・・・

単純にrowtotalを用いると、思わぬ落とし穴にハマる。

egen totalscore = rowtotal(score_1-score_3)

出てきた総得点 totalscoreを見ると、以下のようになっている。

総得点の計算はできたが・・・。

何が問題か?

総得点を見ると、欠損値の考慮が全くされてない。つまり、欠損値は自動的に0になっている。わかっていてこのようにするならば良いが、そうではない人も多いだろう。また、上のような横データで、途中から参加していない人のデータを0とするのは問題が多い。

対処方法

“egen rowmiss”を用いる。

egen n_totalscore = rowmiss(score_1-score_3)

このようにすると、rowtotalで用いた変数の欠損値を”n_totalscore”という変数に格納してくれる。

“n_totalscore”に欠損値の個数が格納される。

この変数を用いて、例えば欠損値が1つでもある人は除外、あるいは欠損値が2つある人を除外、などと場面によって決めてあげれば良い。

*欠損値が1つでもある場合を除外
replace totalscore = . if n_totalscore >= 1
*欠損値が2つ以上ある場合を除外
replace totalscore = . if n_totalscore >=2

この欠損値の扱いをしっかりしておかないと、良い結果が出たと喜んでもそれはfalse positiveで、後で痛い目を見るかもしれない。

関連記事

generateで変数を作る、あるいは置き換えたり削除する方法
データクリーニング
重複のカウント

コメント

タイトルとURLをコピーしました