SPSS Syntax Macroを利用して解析業務を高速化する
- アウトライン
-
- 作成日: 2026/1/5
- 更新日: –
はじめに
SPSSは、医療・食品・社会科学分野をはじめ、幅広い領域で利用されている統計解析ソフトウェアです。GUI (画面操作) による直感的な解析が可能である一方、実務の現場では・・・
- 同じ解析を何度も繰り返す
- 解析対象の変数が多い
- 条件を少しずつ変えながら検定を行う
といったケースも少なくありません。そのような状況で、GUI操作をその都度繰り返していると、
- 作業時間がかかる
- 操作ミスや設定漏れが生じやすい
- 解析手順の再現性を保ちにくい
といった問題が生じがちです。
こうした課題を解決する手段として有効なのが、SPSS のシンタックス (Syntax) とマクロ (Macro) 機能です。
シンタックスを用いることで解析手順をコードとして保存・再利用でき、さらにマクロを活用すれば、同じ解析を複数の変数に対して自動的に繰り返し実行することが可能になります。
本稿では、SPSS における基本的なt検定を題材に、
- シンタックスによる解析の考え方
- マクロを用いた繰り返し処理の仕組み
- 複数変数を一括で解析する実践的な方法
を、具体的なコード例とともに解説します。
- SPSSは使っているが、解析業務に時間がかかっている
- 同じt検定を何度も手作業で実行している
そのような方に向けて、SPSS Syntax Macro を利用して解析業務を高速化するための第一歩となることを目指します。
SPSSでおこなうt検定
2.1 t検定とは?
そもそも t検定 とは何でしょうか。
t検定は、2つの標本 (群) を比較し、その平均値の差が偶然によるものなのか、それとも統計的に意味のある差と言えるのか を判断するための統計手法です。
例えば、
- サプリ A を摂取する前後で効果に差があるか
- 新製品と旧製品の 性能に違いがあるか
といったように、「平均値に差があるかどうか」を確認したい場面は多くあります。このようなケースで広く用いられるのが t検定です。t検定は、大きく「対応のある t検定」と「対応のないt検定」の2種類に分けられます。
【対応のあるt検定】
対応のあるt検定は、同一対象から得られた2つの観測値の差に意味がある場合に用いられます。このようなデータでは、個人差そのものよりも「前後の変化量」が重要になります。
例えば、あるサプリがBMIの低下に効果があるかを調べるために10人の被験者を集め、一定期間サプリを摂取してもらったとします。この場合、解析で重要となるのは、同じ被験者におけるサプリ摂取前後のBMIの差であり、対応のある t検定が適しています。
【対応のないt検定】
一方、対応のないt検定は、互いに独立した2群の観測値を比較する場合に用いられます。各観測値は個別の対象から得られており、対になる関係は存在しません。
例えば、10人の被験者を2群に分け、5人がサプリA、残りの5人がサプリBを一定期間摂取したとします。この場合、各被験者の測定値には個人差が含まれるため、サプリA群とサプリB群の平均値を群間で比較することになります。これが対応のないt検定です。
対応のないt検定には、さらに以下の2種類があります。
- Studentのt検定
2群の母分散が等しいと仮定して、平均値の差を検定する方法
- Welchのt検定
2群の母分散が等しくないと仮定して、平均値の差を検定する方法
まとめるとこんな感じです。
| 検定名 | 比較対象 | 使用条件・目的 |
|---|---|---|
| 対応のあるt検定 | 同一対象の2条件間の平均差 | 同一対象に対して前後比較などを行う場合に使用 |
| welchのt検定 | 2つの独立した母集団の平均 | 2群の母分散が異なると仮定し、平均に差があるかを検定する。 |
| studentのt検定 | 2つの独立した母集団の平均 | 2群の母分散が等しいと仮定し、平均に差があるかを検定する。 |
このように、一口にt検定といっても、データの構造や仮定に応じて適切な手法を選択する必要があります。本稿は、この中でも基本的で実務上よく用いられるt検定に焦点を当てて解説していきます。
2.2 シンタックス (Syntax) とは?
SPSSでデータ解析を行う方法には、大きく分けて2つのアプローチ があります。ひとつは、画面上のメニューやダイアログ・ボックスを操作して解析を行うGUI (Graphical User Interface)、もうひとつは、コマンドを直接記述して実行するシンタックス (Syntax) です。
シンタックスでは、SPSSが提供するコマンド言語を用いることで、解析手順を 明示的なコードとして記述 できます。多くの解析操作はGUIからも実行可能ですが、GUI操作の裏側では必ずシンタックスが生成されています。また、GUIでは指定できないオプションや、より細かな制御が可能なコマンドも存在し、シンタックスを用いることで 柔軟かつ高度な解析 が可能になります。
さらに、解析内容をシンタックス・ファイルとして保存しておくことで、同じ解析を何度でも再現できるという大きな利点があります。解析条件を変更したり、別のデータセットに対して同一の解析を適用したりする場合でも、シンタックスを実行するだけで処理を一括して行うことができます。
このように、再現性の確保や作業効率の向上、複数データへの一括処理を実現したい場合には、シンタックスの活用が非常に有効です。
繰り返し処理について
同じ解析を繰り返すのにシンタックスの作成が有効なのはわかっていただけたかと思います。
しかし、毎回同じ解析だからと言って変数まで全く同じとは限らないですよね?
変数が変わるたびにシンタックスの編集を行うには非常に労力を使いますし、何よりミスにつながりやすくなります。
そこで用いたいのが 「繰り返し処理」 です。
3.1 繰り返し処理とは?
SPSSの標準コマンドには、一般的なプログラミング言語に見られるFOR文やDO WHILE文は用意されていません。その代わりに、SPSSマクロを用いることで、同様の繰り返し処理を実現します。
SPSS マクロにおいて、最もよく使われる繰り返し処理が 「!do ループ」 です。
!do !変数名 !in (値1 値2 値3 ...)
ここに”繰り返したい処理”を書く
!doend
これが !do ループの基本構文です。
!in の後ろに指定したリスト(値1、値2、値3、…)の要素を上から順に取り出し、それぞれに対して同じ処理(「繰り返したい処理」)を実行します。
あわせて理解しておきたいのが、! の意味 です。!は、「SPSS マクロのキーワード、またはマクロ変数である」ことを示す記号です。!do、!in、!doend のように ! が付いているものは、すべて マクロ処理専用の命令や変数 を表しています。
3.2 繰り返し処理の使い方
それでは、この 繰り返し処理をt検定に応用 していきます。ここで「繰り返したい処理」とは、もちろんt検定の実行です。そのため、!do ループの中にt検定を指定するシンタックスを記述します。
!do !vr !in (!1)
!let !p1=!concat(!vr,"")
T-TEST GROUPS=性別(0 1)
/MISSING=ANALYSIS
/VARIABLES=!p1
/CRITERIA=CI(.95).
!doend
このコードでは、!do ループによって、指定した変数リストを1つずつ取り出し、同じt検定を繰り返し実行しています。
GUI からt検定のシンタックスを貼り付けると、通常/VARIABLES= の後には、検定対象として指定した具体的な変数名 (例: 身長、体重、BMI など) が記述されます。しかし、複数の変数に対して同じ検定を行う場合、その都度シンタックスを書き換えるのは手間がかかり、入力ミスの原因にもなります。
そこで、本例では /VARIABLES=!p1 と記述しています。
!p1 には、ループ内で現在処理している変数名が自動的に代入されるため、実行時には
- 1回目: 身長
- 2回目: 体重
- 3回目: BMI
といった形で、変数名が順番に展開され、t検定が自動的に実行 されます。
このように、/VARIABLES=!p1 という書き方を用いることで、複数の変数を一つずつ指定し直すことなく、同じt検定を効率的に繰り返し実行することが可能になります。
3.3 t検定に繰り返し処理を用いる
それでは、実際に t検定に繰り返し処理を組み込んだシンタックスを作成していきます。
【データセットの取得】
まずは解析対象となるデータセットを読み込みます。今回は、SPSSに付属しているサンプルデータ「dietstudy.sav」を使用します。
* --- データセット取得 ---
GET
FILE='C:\Program
Files\IBM\SPSS\Statistics\23\Samples\Japanese\dietstudy.sav'. * 開くファイルの指定
DATASET NAME データセット1 WINDOW=FRONT.
この仮想データファイルには、「Stillman diet」に関する研究結果が含まれており、各ケースは個別の被験者を表しています。被験者ごとに、ダイエット前後の体重 (ポンド) および中性脂肪 (mg/100 mL) が記録されています。
下記に仮想データファイルに含まれる変数名と変数に対応するデータの意味を示します。
| 変数名 | データラベル |
|---|---|
| 患者id | |
| 年齢 | |
| 性別 |
0: 男性 |
| 脂肪0 | 中性脂肪 |
| 脂肪1 | 中性脂肪の中間測定1 |
| 脂肪2 | 中性脂肪の中間測定2 |
| 脂肪3 | 中性脂肪の中間測定3 |
| 脂肪4 | 中性脂肪の最終測定 |
| 体重0 | 体重 |
| 体重1 | 体重の中間測定1 |
| 体重2 | 体重の中間測定2 |
| 体重3 | 体重の中間測定3 |
| 体重4 | 体重の最終測定 |
【解析対象の絞り込み (フィルター処理)】
次に、解析対象を条件で絞り込みます。ここでは例として、45歳を超える被験者のみを対象に解析を行います。
* --- フィルター ---
USE ALL. * すべてのケース (行) を対象にする
COMPUTE filter_$=(年齢 > 45 ). * 年齢が45歳以上の人でフィルターをかける
VALUE LABELS filter_$ 0 'Not Selected' 1 'Selected'.
FORMATS filter_$ (f1.0).
FILTER BY filter_$.
EXECUTE. * 上記のコマンドを即時に実行するための命令
【繰り返し処理を用いたt検定の定義】
次に、複数の変数に対してt検定を自動的に実行するためのマクロを定義します。
define !doAnalysis (!pos=!cmdend)
!do !vr !in (!1)
!let !p1=!concat(!vr,"")
T-TEST GROUPS=性別(0 1)
/MISSING=ANALYSIS
/VARIABLES=!p1
/CRITERIA=CI(.95).
この部分では、
- !do !vr !in (!1) によって変数リストを 1 つずつ取り出し
- !p1 に現在処理中の変数名を代入
- その変数に対して同じ t検定を実行
という処理を行っています。
【マクロの終了と実行】
最後にマクロ定義を終了し、解析対象とする変数リストを指定して実行します。
!doend
!enddefine.
!doAnalysis 脂肪0 脂肪1 脂肪2 脂肪3 脂肪4 体重0 体重1 体重2 体重3 体重4 .
* ============.
このようにすることで、指定したすべての変数に対して、性別を群としたt検定が自動的に繰り返し実行されます。
3.4 最終シンタックス
完成した形がこちらです。
* ===============================================.
* データセット取得.
GET
FILE='C:\Program Files\IBM\SPSS\Statistics\23\Samples\Japanese\dietstudy.sav'.
DATASET NAME データセット1 WINDOW=FRONT.
* ===============================================.
* t検定.
USE ALL.
COMPUTE filter_$=(年齢 > 45).
VALUE LABELS filter_$ 0 'Not Selected' 1 'Selected'.
FORMATS filter_$ (f1.0).
FILTER BY filter_$.
EXECUTE.
define !doAnalysis (!pos=!cmdend)
!do !vr !in (!1)
!let !p1=!concat(!vr,"")
T-TEST GROUPS=性別(0 1)
/MISSING=ANALYSIS
/VARIABLES=!p1
/CRITERIA=CI(.95).
!doend
!enddefine.
!doAnalysis 脂肪0 脂肪1 脂肪2 脂肪3 脂肪4 体重0 体重1 体重2 体重3 体重4
.
* ===============================================.
解析結果
先ほど示したSPSSのシンタックスを用いて実行した出力結果がこちらです。
各群の度数、平均値、標準偏差に加え、独立サンプルの検定による平均値の差 (Δ)、差の標準誤差 (SE)、95%信頼区間および有意確率 (P値) が出力されています。
このような表が指定した変数ごとに出力されます。
まとめ
本稿は、SPSSを用いたt検定を題材に、シンタックスとマクロを活用して解析業務を効率化する方法を解説しました。
SPSSにおける解析方法として、GUI操作だけでなくシンタックス (Syntax) を用いる意義を確認しました。シンタックスを使うことで、解析手順をコードとして保存・再利用でき、再現性の高い解析や条件変更への対応が容易になります。
さらに、SPSSマクロの!doループを用いた繰り返し処理を紹介し、
- 同じ t検定を
- 複数の変数に対して
- 自動的に繰り返し実行する
という実践的な方法を示しました。
完成したシンタックスでは、変数リストを変更するだけで解析対象を柔軟に切り替えることができ、手作業による操作や記述ミスを大幅に減らすことが可能になります。
このように、SPSSのシンタックスとマクロを活用することで、
- 解析時間の短縮
- 設定ミス・操作ミスの防止
- 解析手順の再現性・透明性の向上
といった実務上の大きなメリットが得られます。
今回紹介したt検定の例はあくまで一例ですが、同じ考え方は ANOVA、回帰分析、共分散分析 (ANCOVA) など、他の解析手法にも応用可能です。日常的にSPSSを用いて解析業務を行っている方にとって、本稿が 「GUI操作から一歩進んだ解析スタイル」への入口となれば幸いです。