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”という変数に格納してくれる。
この変数を用いて、例えば欠損値が1つでもある人は除外、あるいは欠損値が2つある人を除外、などと場面によって決めてあげれば良い。
*欠損値が1つでもある場合を除外
replace totalscore = . if n_totalscore >= 1
*欠損値が2つ以上ある場合を除外
replace totalscore = . if n_totalscore >=2
この欠損値の扱いをしっかりしておかないと、良い結果が出たと喜んでもそれはfalse positiveで、後で痛い目を見るかもしれない。
コメント