[Stata]generateで変数を作る、あるいは置き換えたり削除する方法

close up photo of survey spreadsheet stata
Photo by Lukas on Pexels.com

https://www.stata.com/manuals/dgenerate.pdf
基本は上から。いつもどおり、コード中で下線が引いてあるものは、その部分だけ書けば省略して書ける。

変数を作る

これは簡単で、genを用いる。

generate newvar = var1 + var2 #var1とvar2の足し算
generate newvar2 = var1*var2 #var1とvar2の掛け算
generate newvar3 = var1^2 #var1の二乗

ちなみに、Stataの四則演算については以下のようになる。

グループコマンド説明
四則演算+足し算
引き算
*掛け算
/割り算
^乗算
論理式!否定
|または
&かつ
関係式>大なり
<小なり
>=大なりイコール
<=小なりイコール
==等しい
!=等しくない
Stata計算規則一覧。

文字の変数を作るときや、観察数(ID番号数)の変数を作るときは、以下。

gen newvar = "Char" #文字変数
gen newvar = _n #観察数の変数。順に1, 2, ...となる。

上の_nについて、カテゴリーごとに順番を振りたいときは以下の様にする。

sort sex #性別でソートしておく
by sex: generate newvar = _n

こうすると、性別ごとに順番に\(1, 2, \cdots\)と振られる。

変数を置き換える。

replaceを用いる。

replace newvar = 2 if sex == 1

注意するのは、if文はコンマなしで続けることと、”sex = 1″でなく”sex == 1″とイコールを二つ続けること。注意するのは、replaceを用いると、欠損値の扱いがいい加減になってしまうということ。Stataでは欠損値は「とても大きい数」として扱われる。どういうことかというと、

replace newvar = 1 if var > 3

などとすると、varが欠損値の場合でも、newvarに1という値が付与されてしまう。これを防ぐには、

replace newvar = 1 if var > 3 & var < .

と、欠損値よりも小さいことを構文中に入れないといけない。

変数の作成される場所

上のように作った変数は基本的にたくさんある変数の一番最後に配置される。変数が少ない場合はこれで十分だが、変数が数千を超えると、探すのも大変になってくる。こういった場合、before, afterオプションを用いる。

gen newvar = var1, before(var1) #var1の前にnewvarを配置
gen newvar = var1, after(var1) #var1の後にnewvarを配置

より詳細はorderコマンドに。
https://www.stata.com/manuals/dorder.pdf

変数を削除する

dropコマンドを用いる。
https://www.stata.com/manuals/ddrop.pdf

drop var1 var2 #var1とvar2を削除
drop code* #codeから始まる変数をすべて削除

if文を組み合わせて、特定の条件の変数を削除できる。

drop var1 if var2 == 3 #var2が3の場合のvar1を削除

よく用いるのは、欠損値がある場合。

drop var1 if var2 == .

変数の名前を変更する

renameを用いる。

rename newvar var5 #newvarをいう変数をvar5という名前に変える

その他の作成方法

例えば、カテゴリー変数varcatが\(1, 2, 3, 4, 5\)という値を取るとする。この変数の\(1\)のみを取り出したいときには、以下のようにすると良い。

gen varnew = (varcat == 1)

このようにすると、varcatが\(1\)の人は\(1\)、それ以外の\(2, 3, 4, 5\)の人が\(0\)という変数が作成される。

関連記事

以下の記事が追加で役に立つ。
データクリーニング データクリーニングの基本
複数の置き換え
カテゴリー変数の作成 cutコマンドは覚えると便利。
2つの変数をまとめる
重複のカウント データクリーニングの一つ
sortとgsortの違い

コメント

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