空飛ぶチンアナゴの統計解析日記

統計解析を嗜むチンアナゴのメモ帳です

STATAの欠損値の話

ある特定の世代には「ぬるぽ」のnullでおなじみの欠損値の話です。
STATAでは欠損値は数字型のデータの場合"."で表現されます。

欠損値の扱いはめんどくさい

例えば、

名前 年齢
あきら 42
あつし 不詳
みのる 50

(以下、行がいっぱい)

みたいな感じで人の名前と年齢が入っているデータセットがあると仮定しましょう。
とりあえず不詳を欠損値に変換すると

名前 年齢
あきら 42
あつし .
みのる 50

(以下、行がいっぱい)

みたいな感じのデータフレームができます。
ではこのデータに50歳以上にフラグを立てるとして

g over50 = 0
replace over50 = 1 if 年齢>=50

とコードを入力した場合どうなるでしょうか?

名前 年齢 over50
あきら 42 0
あつし . 1
みのる 50 1

(以下、行がいっぱい)

となってしまう。
これに気づかずに解析をしてしまうと当然誤った解析を行ってしまいます。

どうしてこういうことが起きるの?

Numeric missing values are represented by “large positive values”. The ordering is
all numbers < . < .a < .b < …< .z
https://www.stata.com/manuals/u12.pdf#u12.2.2Numericstoragetypes

と公式の文章にあるように数字よりも欠損値は大きいよくわからない数字としてSTATA上では取り扱われます。
なので「◯◯よりも大きい値」と単純に指定した場合、欠損値も含まれてしまうので注意しないといけないわけです。

対処法

対処法はそんなに難しくありません。

g over50 = 0
replace over50 = 1 if 年齢>=50 & 年齢!=.

かでもいいですし、もっとシンプルに

g over50 = 0
replace over50 = 1 if 年齢>= 50
replace over50 = . if 年齢==.

としてもいいと思います。
他にも色々な方法があると思いますのでやってみてください。
欠損値を除外できればなんでもいいと思います。