SAS による統計分析入門
東北大学大学院農学研究科 八巻邦次
概要
SAS による統計分析を主にデータ入力、基本的統計手法を学ぶ方法から、多変量の分散分析で複雑な現象の実験結果を解析する SAS プログラムの作り方とそのアウトプットをどう解釈するかを解説した。
１）SAS とは？
東北大学農学部の３年生の学生に動物実験のデータを自ら取り、情報シナジーセンター大規模科学計算システムのアプリケーションである SAS で統計分析して実験結果を発表することを教えてきた。その経験から、SAS による統計分析の入門テキストをここに記してみた。
その SAS（Statistical Analysis System)とは North Carolina State University で開発が始まった統計分析プログラムパッケージで現在では米国 SAS 社が全世界に配布しており、統計パッケージとしては質・量ともに世界で先進的なものといえる。
現在では、単に統計パッケージとしてでなく、さらに発展し民間企業、政府機関、研究機関や大学で、利用される経済予測や製品コントロール、臨床試験やデータベースマーケティ
ング、健康調査、顧客指向調査や株式市場のトレンドに至るまでの情報を評価することができるまでになっている。
SAS の大規模科学計算システムへの導入プロダクトとその利用方法については、小野敏１）「ライブラリー・アプリケーションソフトウエアーの紹介」に詳しく書かれているのでそれを参照されたい。今回は、この膨大なアプリケーションプログラムの中から、BaseSAS（SAS の入出力や基礎的な統計計算のパッケージ）、SAS/STAT（高度な統計計算のプログラムパッケージ）の二つを使って、多変量の分散分析を行って、複雑な実験結果の統計分析を行うことを試みた。
２）大規模科学計算システムでの SAS の利用
大 規 模 科 学 計 算 シ ス テ ム で は SAS ア プ リ ケ ー シ ョ ン は gen3 コ ン ピ ュ ー タ ー(gen3.cc.tohoku.ac.jp)に導入されているので、そこにまずはじめにアクセスしなくてはならな
い。アクセスの仕方はディスプレイマネージャの利用（Ｘ Ｗｉｎｄｏｗｓ環境）の方法と非対話モードでの実行がある。前者では、まず、Ｘ Ｗｉｎｄｏｗ システム環境の設定をします。次にSAS を起動するには
2.１.1） gen3% ｓａｓと入力すると図１から図４までの"LOG","OUTPUT","PROGRAM EDITOR","TOOL BOX"の４つのウィンドウが表示されます。

図１ プログラムエディタのウィンドウ。ここに SAS プログラムを書く

図２ ．Log ウィンドウ。ここにコンピュターから実行経緯が示され、エラーやワーニングが書かれる。

図３．アウトプットウィンドウ。ここに計算結果が書かれる。（今は結果無しの状態）

図４．ツールボックス。実行やその他の命令がボタン形式でできる。
2.1.2） "PROGRAM EDITOR"に SAS プログラムを書き、実行すると"LOG"画面に実行経緯が示され、エラーやワーニングがあると、それぞれ赤色や青色で示される。
2.1.3） 計算結果にエラーがなければ、"OUTPUT"ウィンドウに計算結果は示される。
2.1.4) エラーが出た場合、プログラムエディターで編集して、正しい答えが出るまで実行を繰り返す。
後者では X Window 環境でない利用であり、Telnet で gen3 にアクセスして計算する方法である。それは以下の方法でアクセスする。
2.2.1) FTP で前もって SAS プログラム（拡張子が .sas）とデータファイル（拡張子は .txt など）を gen3 に送っておく。
2.2.2) Telnet で gen3 にアクセスする。
2.2.3) たとえば SAS プログラム名が test01.sas だとすると、gen3% sas test01 と入力する。
2.2.4) 実行が終わると、 test01.log と test01.lst ファイルが作られる。
2.2.5) .log には実行経緯が .lst には計算結果が書き込まれている。
2.2.6) これらのファイルを自分の PC にダウンロードして、結果を見る。
３） SAS のデータの入力
SAS のデータファイルは様々な記述形式に適応するようになっているが、ここでは一般的な方法について説明する。SAS にはそれぞれの統計分析を行うためのプロシージャ（計算手順）がすでに用意されているので、簡単な命令文の形式（プログラムの書き方）を理解できればすぐにこれらの分析を行うことができる。SAS のプログラムでデータの読み込みは、後にどのような分析を行うにしても、どのデータファイルを用い、そのデータがどのように入力されているのかを指定しなければならない。

「eda.txt」というデータファイルという形式で入力されていたとする。

個体番号
12:
:

品種
AB:
:

性
F
M
:
：

体重
21.5
23.8
:
:

体長
5.16.3::

データは行列表示になっており、行は観測値（Observation)、列は変量（Variable）といっている。「データの区切り（デリミタ）は一つ以上のスペースになっていて、必ずしもカラムが揃っている必要はない。また、ここで「個体番号・・・」のような変数名の行は、読み込みの前に消去するか、書かれていても、FIRSTOBS=n のデータセットオプションを付けることで n 行目からデータを読み込むことを指定できる。このような変量は文字変数でも数値変数でも良い。これらのデータを SAS で読み込む SAS プログラムは次のようである。
注意！！

これ以降、SAS プログラムの行の説明を（数字）の後に説明する。
プログラム文は大文字でも小文字でもかまわない。
すべての行の後ろに｢；｣をつける。

DATA dd1;
INFILE 'ｅｄａ.ｔｘｔ';
INPUT NUM BREED $ SEX $ WEIGHT LENGTH;WARIAI=WEIGHT/LENGTH;OPTIONS NOCENTER PAGESIZE =50 LINESIZE=100;
RUN;

（１）
（２）
（３）
（４）
（５）
（６）

（１）DATA 文：プログラム内でのデータ名を定義する。この場合 dd1（何でも良い）。
（２）INFILE 文：｢eda.txt｣というデータファイルから読み込む。
（３）ＩＮＰＵＴ文：変数並びの定義。左から、個体番号、品種、性、体重、体長の順で入力されている。品種と性は数字ではなく文字変数なので、文字変数の後ろに｢＄｣をつける。
（４）新しい変数を作る。＋，−，＊，/ を用いて｢WARIAI｣という新しい変数を作ることができる。
（５）出力ファイルの 1 ページの大きさ指定するオプション文。50-100 程度が見やすい。
（６）ここで RUN 文
以下のプロシージャは上のデータ読み込みの「RUN；」の後に続けて書いていく。

４）基本統計量
平均値、標準偏差、最小値、最大値を求める。
ＰROC MEANS;
VAR WEIGHT LENGTH;
RUN;

（１）
（２）

（１）PROC 文（プロシジャー：プロック）：どのような統計計算を行うのかを指定、この場合、体重と体長の平均値を求める。
（２）VAR 文：変数の指定。
５）品種ごとの平均値を出したい場合
品種ごとに平均値を出したいときは、まず｢SORT｣というプロシージャを用いてデータを品種順に並び替え，その後に｢MEANS｣で品種ごとに体重と体長と割合について平均値を求める。
PROC SORT;BY BREED;PROC MEANS;BY BREED;VAR WEIGHT LENGTH WARIAI;
RUN;

出力結果例
N
Mean
Std Dev
MinimumMaximum---------------------------------------------------------25
1894.00
320.1597258
1380.00
2562.00---------------------------------------------------------データ数 平均値
標準偏差
最小値
最大値

６）分布の正規性や外れ値平均値などの基本的な統計量のほかに、分布の正規性の検定や外れ値の判定なども行える。
proc univariate normal plot；７）頻度分布
PROC FREQ;TABLE BREED SEX;
RUN;

（１）
（２）

PROC FREQ;TABLE BREED*SEX;
RUN;

（１）
（３）

（１）基本統計量、頻度分布プロシージャの実行。
（２）品種と性別ごとの頻度。
（３）品種と性別を組み合わせた水準の頻度。いわゆるクロス集計。
−出力結果（例）
要因の組合せごとに下のような並びで値が示される。
性1 性2
品種 1 データ数
百分率(%)
行の百分率(%)
列の百分率(%) 26
27.66
56.5253.06
品種 2（省略） : :８）相関係数
二つの変数の間の親密の程度や関連性などを表す。グラフにプロットすると関連性を視覚的に把握することができる。また相関係数という数値で関連性の強さを表すことができる。
PROC CORR;
VAR WEIGHT LENGTH;
RUN;

（１）
（２）

（１）相関係数行列を打ち出す。相関がないことに対する有意性検定の確率が表示される。
（２）変数を指定。三つ以上だと行列表示になる。

９）散布図PROC PLOT;
PLOT WEIGHT*LENGTH;
RUN;

（１）
（２）

（１） 2 つの変数の散布図を描く。
（２） 変数を指定。

PROC PLOT;
PLOT WEIGHT*LENGTH=BREED;
RUN;（１）（３）（３）「品種ごと」という指定をしたいとき、このように書くと、品種ごとにグラフ化される。
（２）の場合はすべての品種が同時にプロットされる。
１０）回帰
目的変数（Ｙ）が説明変数（Ｘ）に依存する関係を調べ、ＸからＹを推定することである。
今、ＸがＹに直線的、または曲線的に回帰していると想定し、Y=b0+b1*X (1 次回帰、直線)
または Y=b0+b1*X+b2*X2 (2 次回帰、曲線) とおいて、b0〜b2 を推定する。定数ｂ０〜ｂ２を求めるには、最小自乗法を用いてｙの実際の値と予測値との差が最も小さくなるように計算する。
たとえば、今までのデータに、AGE（日齢）という変数がさらにあったとし、日齢に対する体重の直線および曲線回帰を求める。
DATA;
INFILE 'ファイル名';
INPUT
〜AGE;
AGE2=AGE*AGE;
PROC REG;
MODEL WEIGHT = AGE;
MODEL LENGTH = AGE2 AGE;
RUN;

（１）
（２）
（３）
（４）
（５）（６）（７）（１）〜（３）今までと同じ。データの読み込み。
（４）曲線回帰を調べるために AGE2（二乗の変数）という値を作っておく。

（５）回帰のプロシジャー。
（６）直線回帰 Ｙ=b0＋b1*AGE（７）曲線回帰 Ｙ=b0＋b1* AGE＋b２*AGE2
出力結果例
Analysis of Variance ( モデル式の検定 )Sum ofSource
DFSquares

Mean
SquareF Value

Prob>F

モデルの自由度 偏差平方和

平均平方Ｆ値

Ｐ値(※1)

19515915.075
93404.221527

208.9400.0001ModelError
C Total29193

Root MSE
Dep MeanC.V.

39031830.15
8499784.1589
47531614.309

305.62104
1360.22340
22.46844

R-square（寄与率）
Adj R-sq

0.8212(※2)
0.8172※1
P 値とはこのモデルが適合していないという仮説を F 検定で検定したときの仮説の確からしさを表し、これがある基準（0.05 または 0.01）よりも低いということは、このモデル式が適合しているということがいえる。
※2
R-squre は寄与率または決定係数と呼ばれ、目的変数の分散とモデルによって説明される分散の比率を表し、0〜1 の値をとる。これが 1 に近いということは、モデル式によってより多くの分散が説明できる、つまりモデルの適合度を表してる。

Parameter Estimates (係数の予測値と検定)
Parameter
Standard
Variable DF
EstimateError
自由度INTERCEPAGE211※3

標準誤差-608.127282 172.97827755-5.801246
1.57686842

T for H0:
Parameter=0Prob > ¦T¦※4※5-3.516-3.6790.00070.0004

AGE
1277.585313 35.18249136
7.8900.0001※3
この値がそれぞれの変数の回帰係数を表している。INTERCEP は指定した変数以外の誤差、つまり直線、曲線回帰の定数項である。
このモデルでは Y = - 5.80 * AGE2 + 277.58 * AGE - 608.13 という式が立てられた。
※4
それぞれの変数の回帰係数が 0 であるという仮説をｔ検定している。
※5ｔ検定での仮説の確からしさを表し、これがある基準よりも低いということは、その説明変数が目的変数へ有意な影響を与えていると言える。
１１）ｔ検定ある 2 つの集団の平均値の差が統計的に意味のあるものなのか、偶然によって生じた程度のものなのかを判定する。検定を行うにはまず仮説を立て、その仮説がなりたつ確率を計算する。ｔ検定では「2 つの集団の平均値には差がない」という仮説を立て、これを「H:0」（帰無仮説）で表す。
H:0 が成り立つとき「ｔ＝2 群の平均値間差／2 群の平均値間差の標準偏差」というｔ値は、t 分布（差がないという仮説のもとでのｔ値の理論分布）に従う。得られたｔ値より大きい値が得られる確率が p 値（Prob > ｜T｜ で表す）である。p 値がある基準より小さいということは成り立たない、ということを表し、H:0 は棄却される。結論として 2 群の平均値間には有意な差があるということができる。
H:0 を棄却するかどうかのｐ値の基準には 0.05 や 0.01，0.001 をよく用いる。もし「Prob>｜T｜」が 0.05 より小さければ、「2 群の平均値間は危険率 5%で有意に差がある」といういい方をする。

PROC TTEST;CLASS BREED;
VAR WEIGHT LENGTH;
PROC TTEST;CLASS SEX;
VAR WEIGHT LENGTH;
RUN;
これをまとめて

（１）
（２）
（３）
（１）
（４）
（３）CLASS BREED SEX;
VAR WEIGHT LENGTH;
RUN;とはできない。
（１）t テストを行え。
（２）品種ごとにクラス分けして。
（３）WEIGHT と LENGTH の２変数で。
（４）性ごとに分けて。
出力結果例
N
Mean
Std Dev
Std Error
Variances
TDF
Prob>¦T¦
データ数 平均値
標準偏差
標準誤差
分散(※1) ｔ値 自由度※2--------------------------------------------------------------------------C 48 12.25000000 3.54604965 0.51182818 Unequal 10.4223 74.3 0.0001
N 466.10869565 1.98021616 0.29196694 Equal
10.3054 92.0 0.0000
For H:0 Variances are equal, F' = 3.21

DF = (47,45)

Prob>F' = 0.0001(※3)※ 1ｔ検定のｐ値（Prob>¦T¦）は 2 群の分散が等しくないとき(Unequal）と等しいとき（Equal）にそれぞれ異なる方法で行われた検定の結果が表示されている。どちらを用いるかは※3 に表示されているＦ検定（(8)で述べる）の結果を見て分散が等しいかどうかを確認し Unequal と Equalのどちらかのｐ値を採用する。Ｆ検定では「Prob>F'」がある基準よりも小さければ分散が等しくないとみなせるので Unequal を、ある基準より大きければ Equal のｐ値（Prob>¦T¦）を用いる。
この場合は 0.01 よりも小さいので分散は等しくないとみなし、Unequal を採用する。
※ 2
平均値は等しくないという仮説が起こる確率が 0.0001 とかなり低いので、両群の平均値は0.1％有意で異なるということができる。
１２）Ｆ検定ある 2 つの集団の分散が等しいと言えるか、またはその差が誤差の範囲かどうかを判定する。Ｆ検定では「H:0 分散は等しい」という仮説を立てる。
いま A と B という二つの集団があるとき、「Ｆ=A の分散／B の分散」というＦ値を計算すると、H:0 が成り立つときこの値はＦ分布（H:0 という仮定の下でのＦ値の理論分布）に従う。
得られたＦ値より大きい値が得られる確率が p 値（Prob＜F で表す）であり、p 値がある基準よりも小さいということは H:0 は成り立たないということを表し、H:0 は棄却される。結論として

分散は等しくない、ということができる。
１３）ＧＬＭ（一般線形モデル）による多変量分散分析
分類変数（例：品種、性）を説明変数とした線形モデルを作り、分散を分解することでそれぞれの説明変数が目的変数（例：体重）に及ぼす効果を調べる。効果の有無の判定はＦ検定を用いる。
今、ある集団の体重は品種と性の影響を受けていると仮定して体重＝全平均＋品種の影響＋性の影響 ＋エラーYijk=μ+Bi+Sj+εijk
ここで、μ：全平均
Bi：品種の効果
Sj：性の効果
εijk：誤差（未知の効果）という線形モデルを設定する時、全分散も次のようにそれぞれの効果に分解することができる。
全分散＝品種による分散＋性による分散＋誤差の分散
次に「H:0 品種による分散と誤差の分散が等しい」という仮説をたて、Ｆ検定を行う。
検定の結果、「Prob>F」が基準より小さいということは H:0 は成り立たない、つまり品種と誤差の分散は等しくないので、品種の影響の大きさは誤差の影響の大きさと有意に異なる。よって品種は体重に有意な影響を与えているということができる。

PROC GLM;
CLASS YEAR PLACE;
MODEL WEIGHT LENGTH = YEAR PLACE SIRE;
RUN;

（１）
（２）
（３）

（１）GLM 分析を行え。
（２）説明変数は YEAR と PLACE である。
（３）一般線形モデルは従属変数が WEIGHT,LENGTH で説明変数は YEAR,PLASE,SIRE である。目的変数が「＝」の左、説明変数を右に書く。
この時、SIRE は CLASS に現れていないので変量効果とみなされる。また、MODEL の説明
変 数 の 欄 に 「 YEAR*PLACE 」 を 加 え れ ば YEAR と PLACE の 交 互 作 用 、 「 YEAR
PLACE(YEAR)」とすると、PLACE は YEAR の枝分かれ構造であることを表す。
出力結果例
Dependent Variable: EDA

SourceModelError
Corrected Total

DF
48993

R-Square0.861280

Sum of Squares
40938037.2
6593577.0
47531614.3
C.V.
20.01038

Mean Square
10234509.3
74085.1

Root MSE
272.18584641

F Value
138.15Pr > F
0.0001EDA Mean
1360.22340426

回帰分析を同じように、まずそのモデルのＦ検定の結果が出力される。「Pr > F」が基準以下ならばそのモデルは適合しているといえ、その適合の度合いは決定係数（R-Square）で示されている。この値が低い時は、CLASS で取り上げた要因以外に目的変数に影響を与えている要因が存在することを意味する。
SourceBREED
SEXPROENERGYDF
1111

Type I SS
38571786.7
660618.9
188.3
1705443.1

Mean Square
38571786.7
660618.9
188.3
1705443.1

F Value
520.64
8.92
0.00
23.02

Pr > F
0.00010.0036
0.95990.0001

SourceBREED
SEXPROENERGYDF1111

Type III SS
39466225.8810531.2
6142.31705443.1

Mean Square
39466225.8810531.2
6142.31705443.1

F Value
532.71
10.94
0.08
23.02

Pr > F
0.00010.00140.77410.0001

それぞれの説明変数の目的変数に対する効果の有意性は「Type I SS」と「Type III SS」の2 種類出力される。Type I は各説明変数ごとのデータ数がすべて同じときに用いることができ、データ数が異なるときは Type III を用いる。
それぞれの説明変数のＦ値（Pr > F）が基準以下なら、その説明変数は目的変数に有意な影響を与えていると言える。この例では「品種とエネルギーの効果は危険率 0.1％、性は危険率 1％でそれぞれ有意な影響を与えており、たんぱく質は有意な影響を与えていなかった」ということができる。
文献１ ) 小 野 敏 「 ラ イ ブ ラ リ ー ・ ア プ リ ケ ー シ ョ ン ソ フ ト ウ エ ア ー の 紹 介 」 SENAC
Vol.35,No.1,P42-44(2002,4)２） SAS 出版局 「Base SAS ソフトウエアー使用法ガイド」
３） SAS 出版局 「SAS /STAT ソフトウエア ユーザーズガイド」
４） 竹内啓ら 「SAS によるデータ解析入門」 東京大学出版会