~分析みたいなものはGUIでやるときに「貼り付け」オプションでやり方を知ることもできるのですが、条件分岐をして変数を変換をする場合のような分析の下準備関連の作業についてはそもそもGUIでどうやるのか分からないことも多く、その都度調べるのがけっこうめんどくさかったりします(なので、個人的にはいつもExcelとかRで変換したりしてました)。
(そして、公式で引っかかるページも、「このバージョンのサポート終了しました」的な画面が出たりします..)
そんなわけでSPSSのシンタックスでdo if()による条件分岐を使って新しい変数を作成するやり方について備忘録的にまとめます。
単純な変数の変換であれば、「変換」→「他の変数への値の再割り当て」で行けるのですが、複数の条件がまたがるときのように少し複雑な場合はdo if()を使った方が楽なことがあります。
ポイントとしては以下の通りです。
- do if ().を使う
- 複数の条件があるときは、else if を使う。
- 「指定した条件以外」はelse.
- do ifを終了したことを示すend if.を忘れずに
do if を使った条件分岐の書きかた(SPSS シンタックス)
一般的な書き方としては、以下のイメージです。
do if (条件①).
条件①のもとで実行する内容. *compute(変数3 = 1)など.
else if (条件②).
条件②のもとで実行する内容. *compute(変数3 = 2)など.
….(条件の続く限り)
else.
上記の条件のいずれも満たさない場合に実行する内容. *compute(変数3 = 99)など.
end if. *do ifのシンタックス文が終わったことを示す一文.
execute. *実行して出力する一文.
SPSSでdo if を使う実例
今回は例として、2つのテスト(test1, test2)の合計点をもとにした判定(hantei)という変数を新たに作成するというものをやってみます。
例えば、6人の生徒が2回のテストを受けたというような、以下のようなデータがあるとします。そのうち、ID6は2回ともテストを欠席しました。
(もちろん架空データです)
単純な条件として、
test1 + test2 が10点以上なら「とても良い」、5点以上なら「良い」5点未満なら「普通」とします。
この場合のシンタックスは以下のようにします。
do if (test1 + test2 >= 10). compute hantei = 1. else if (test1 + test2 >=5). compute hantei = 2. else. compute hantei = 3. end if. value labels hantei 1'とても良い' 2'良い' 3'普通'. execute.
実行すると以下のようになります。
見てわかる通り、欠損値があるID以外は、しっかりと条件に合わせてhanteiが入力されているのがわかります。
(hanteiの数字が何を表しているか後からわかるように、下から2行目の行で新しく作成した変数の値の意味を指定しています。)
do if() の注意点
do if()で条件分岐を作るときの注意点は以下の2点です。
- ピリオドの付け忘れに注意
- 条件ブロックが終わったことを明示する end if.の付け忘れに注意
特に、end if.は忘れがちです。この辺りは、Rとかでは入れない一文なのでSPSSのシンタックスのクセスゴ感が表れています。