Winter 2004

特集

SAS Enterprise Guide
2.0による分散分析
SAS Enterprise Guide 2.0による分散分析

1. はじめに
Q&A

この特集では、SAS Technical News 2003年夏号の特集記事「SASSASトレーニングのお知らせ

Enterprise Guide 2.0（以下EG 2.0）で利用できる統計手法を紹介

Enterprise Guide 2.0 による記 述 統 計の 活 用 」に引き続き、SASします。今回は、複数の平均値を比較・検討する手法に関して説明します。

新刊マニュアルのご紹介

この手法は、
たとえば男女間の身長、体重に差があるかを調べる場合などに活用できます。一般的には分散分析と呼ばれ、複雑な実験計画に対しても分析を行なうことができますが、ここでは簡単なモデルを用いてEG

最新リリース情報

2.0における具体的な指定・選択を交えて説明します。
サンプルデータとしてCLASSデータとFITNESSデータを用います。これらのデータは、EG 2.0の［バインダリスト］ウィンドウから［Sample］を展開して参照できます。CLASSデータには、19人の名前、年齢、性別、身長、体重が記録されています。また、FITNESSデータには多くの変数が含まれていますが、今回は酸素の摂取量を表す応答変数（Oxygen）と、各被験者が行なったエクササイズを表す変数（Group）を使用します。

2. 平均値に対する検定、および2平均値の比較
1つの母集団を仮定している場合、観測データから算出された平均値、要約統計量を元に、母集団における平均値が検定値（任意の数値）である
かを検討します。また、2つの母集団を仮定している場合には、母集団において平均値が等しいかを検討します。具体例としてCLASSデータにおける身長（Height）を用い、EG 2.0で検討する方法を紹介します。この他、データの観測値間に対応がある場合には、対応があることを考慮した上で、平均値に対する検討を行なうことがより適した手法となります。

2.1 平均値に対する検定

4）［分析］
タブをクリックし、検定値（任意の数値）
を帰無仮説にて指定する。

CLASSデータにおける身長（Height）の平均値は、EG 2.0のメニューから

男女間における平均値が同じであるかどうかを検討するので、検定値［分析］→［記述統計量］を選択することにより、62.3インチ（約158cm）とを0（デフォルト）に指定します。

表示されます。仮に、母集団（※注1）における平均値が60インチ（約152cm）［プロット］タブをクリックし、箱ひげ図または平均のプロットを選択する。
5）であるとされている場合、観測データから母集団における平均値が本当に平均のプロットを選択した場合には、プロットに関するオプションを選

60インチであるかを検証します。EG 2.0では以下のように選択してください。
※注1 たとえば、ある中学校Aに在籍する生徒から19人を選択し、データを収集した
場合には、母集団は中学校Aに在籍する全ての生徒となります。

択できます。
［完了］をクリックする。
6）

1 標本に対する検定［分析］→［分散分析］→［t検定］を選択する。
1）メニューから［t検定の種類］タブをクリックし、［1 標本に対する検定］を選択する。
2）［変数］タブをクリックし、分析変数を選択する。
3）
ここでは、分析変数として変数Heightを選択します。
［分析］タブをクリックし、検定値（任意の数値）を「帰無仮説」にて指4）定する。ここでは、身長が60インチであるかどうかを検討するので、検定値として60を入力します。また、信頼水準（デフォルトでは95%）の変更、標準偏差に対して信頼区間を求める際の手法も選択できます。
［完了］をクリックする。
5）

図2：2平均値の比較結果の一部

図2では、2つのt検定の結果が出力されています。最初のt検定は、男子と女子における分散が等しいことを仮定していますが、2つ目のt検定では分散が等しいことを仮定していません。どちらの統計量を用いるかは意見が分かれるところですが、ｔ検定の種類を選択する時のひとつの指標として、等分散性の検定であるFolded F統計量を使用できます。ここでは、Folded F統計量から、分散が等しいと仮定（※注2）
し、最初のt検定によるp値を参照します。また、
このp値0.1645が0.05（あらかじめ定めた有意水準値）以上なので、母集団の平均値に差がないということを棄却できません。つまり、CLASSデータには、男女の身長に差があるというには十分
図1：平均値に対する検定結果の一部

図1では、
変数Heightの平均値（Mean）が62.337インチ、標準偏差（Std Dev）

な確証がないと解釈します。
※注2 正確には、Folded F統計量に対するp値（Pr>F）が大きい値（0.9527）なので、分散が等しいという帰無仮説を棄却することができないと解釈します。

が5.1271インチであることが表示されています。これらの要約統計量を元に、t検定における統計量（t Value）が1.99、対応するp値（Pr > t ）が0.0624と2.3 対応のある観測値に対する検定算出されています。事前に有意水準値（α）を0.05と定めている場合には、対応のあるデータの具体例として、薬剤の投与前後における観測値が挙算出されたp値が0.05以上ですので、母集団における身長の平均値が60げられます。たとえば、投与前、投与後の観測値をそれぞれ変数Before、

インチであるという仮説を棄却することができません。つまり、身長が60イン

Afterとした場合、以下のように選択してください。

チであるという仮説を否定するには十分な確証がないと解釈します。
対応のある検定

2.2 2平均値の比較

1）メニューから［分析］→［分散分析］→［t検定］を選択する。

上記では、身長（Height）の平均値が60インチであるかどうかを検討しま

2）［t検定の種類］タブをクリックし、［対応のある検定］を選択する。

した。しかし、男子と女子における身長差の有無についてはわかりません。

3）［変数］タブをクリックし、対応のある変数を2つ選択する。

男子と女子の（標本における）身長の平均値は、それぞれ63.9インチ（約162cm）、60.6インチ（約154cm）ですが、母集団において男子と女子の身長に差があるかを検証するには、以下のように選択してください。

対応のある変数として変数BeforeとAfterを指定します。
［分析］タブをクリックし、検定値（任意の数値）を「帰無仮説」にて指定する。
4）
2つの変数間における差異が検定値であるかを検討する場合に指定します。
5）［完了］をクリックする。

2 標本に対する検定
1）メニューから［分析］→［分散分析］→［t検定］を選択する。
2）［t検定の種類］タブをクリックし、［2 標本に対する検定］を選択する。
3）［変数］タブをクリックし、分析変数と、グループ化する基準を選択する。
ここでは、分析変数として変数Heightを選択し、グループ化する基準として変数Sexを指定します。

6）［完了］をクリックする。
※注3 一元配置分散分析では等分散性を仮定していますが、Welch検定ではこの仮定をせずに検定を行ないます。

図3：対応のある検定結果（サンプル出力）

図3では、変数Beforeを変数Afterから引いた値の平均値2.6908が、その他の要約統計量とともに表示されています。2つ目の表では、対応のあるｔ検定の統計量（t Value）が11.21、p値（Pr > t ）が0.0001より小さいと算出されています。そのため、母集団において変数Afterから変数Beforeを

図4：平均値の比較結果の一部引いた値が0より大きいと解釈できます。
t検定では、検定統計量としてｔ値（t Value）が算出されましたが、一元配置

3. 一元配置分散分析

分散分析（図4参照）では、F値（F Value）が検定統計量として用いられま「2．
平均値に対する検定、および2平均値の比較」では、1つまたは2つの平す。ここでは、F値（F Value）が0.94、対応するp値（Pr>F）が0.4040です

均値に対する検定を紹介しましたが、この節では3つ以上の平均値の比較

ので、有意水準（たとえば0.05）と比較した場合、要因の水準における全てに関して説明します。ここでは、データにおける標本を区別するための変数の平均値が同じであるという仮説を棄却することができません。つまり、を要因とし、
その変数の取り得る値を水準とします。CLASSデータの場合、

FITNESSデータの場合、グループ間において酸素の摂取量が異なるとい要因は変数Sexであり、水準はF（女子）とM（男子）となります。

うには統計的な確証がないと解釈します。一元配置分散分析の場合、1つ要因における水準値が2つである場合には、t検定で平均値が同じであるかの検定統計量にて全ての水準における平均値が同じであるかを検証する

を検証できます。水準の数が3つ以上である場合には、t検定を複数繰り返ことができます。検定の結果、算出されたp値が小さい場合には、少なくとすことにより、各水準における平均値が同じであるかを検討することができも1つの水準における平均値が異なることは分かりますが、どの水準におます。しかし、有意水準が100α％であるt検定を複数繰り返した場合、全体ける平均値が異なるかに関しては分かりません。このような場合、ステップの検定としての有意水準が100α％とは異なってしまいます。つまり、母集団

5）の［プロット］タブでグラフを作成することにより、各水準での平均値のにおける差がないにも関わらず差があると判断する過誤をしやすくなります。

推移を視覚化することができます。
（図5参照）

そのため、一度に平均値が全て同じであるかを検討する手法として、分散分析が用いられます。また、t検定を繰り返す場合にも全体の検定としての有意水準が100α％となるように、調整する方法（多重比較法）があります。

3.1 1要因に対する分散分析
グ
FITNESSデータでは、被験者を3つのグループ（変数Group）に分け、
ループごとに異なるエクササイズを行ない、酸素の摂取量（変数Oxygen）
を観測しています。ここでは、酸素の摂取量がグループによって異なるかを検証するために、以下のように選択してください。
一元配置分散分析［分析］→［分散分析］→［一元配置分散分析］を選択する。
1）メニューから［変数］タブをクリックし、従属変数と独立変数（1つのみ）を選択する。
2）
ここでは、従属変数として変数Oxygen、独立変数として変数Groupを指定します。
［検定］タブをクリックし、Welch検定（※注3）を行なうかを選択する。
3）
また、等分散性の検定を行なう場合には、検定方法を選択します。
［平均値］タブをクリックし、平均値に対するオプションを指定する。
4）a）［詳細］をクリックし、出力する要約統計量を選択します。
b）「比較」に関しては、「3.2 多重比較法」を参照してください。
［プロット］タブをクリックし、箱ひげ図または平均のプロットを選択する。
5）
平均のプロットを選択した場合には、プロットに関するオプションを選択できます。

図5：平均値のプロット

3.2 多重比較法

3.3 分散分析と多重比較法に関して「3.1 1要因に対する分散分析」では、各水準における平均値が同じであ分散分析では、水準における平均値が全て同じであるかを1つの統計量るかを検討しました。しかし、他の手法として水準を2つずつ選択し、比較に要約し、検定できます。しかし、少なくとも1つの水準における平均値がを複数回行なうことによって同じように全ての平均値が同じであるかを検他とは異なると判断された場合、どの水準が違うかは分かりません。一方、討することができます。一般的には多重比較法と呼ばれる手法です。しか

多重比較法では各ペアにおける検定を行なっていますので、どの平均値し、全体の検定としての有意水準を一定の数値（100α％）にするために、が異なるかを検討することができます。

調整が必要になります。EG 2.0における［一元配置分散分析］では、分析

分散分析と多重比較法では、同じ問題に対して別々の手法を用いている

目的、データ等に応じたさまざまな調整法を選択できます。

ため、必ずしも同じ結果が得られるとは限りません。分散分析では少なくと手法の選択は、「3.1 1要因に対する分散分析」で説明した［一元配置分

も1つの水準における平均値が他とは異なる結果が得られている場合にも、

散分析］におけるステップの4）-b）で可能です。

多重比較法では全ての平均値が同じであるということもありえます。分析
目的等を考慮した上で、適した手法を活用してください。

4. ノンパラメトリックな一元配置分散分析［一元配置分散分析］における検定は、応答変数が正規分布に従うことを仮定しているので、データによっては分析手法として適切でない場合があります。この正規性を仮定しない分析手法として、ノンパラメトリックな手法があります。これらの手法では、観測値そのものではなく観測値をスコアに変換して分析を行ないます。スコアへの変換方法としてさまざまなものがあり、EG 2.0では多くの変換方法を選択できます。具体例として、
FITNESSデータに対してノンパラメトリック手法の1つであるWilcoxon
検定を行なうには以下のように選択してください。

図6：多重比較法の選択画面

ノンパラメトリックな一元配置分散分析
1）メニューから［分析］→［分散分析］→［ノンパラメトリックな一元配置
分散分析］を選択する。

図6では、多重比較法として「Tukeyの多重比較」を選択しています。また、

2）［変数］タブをクリックし、従属変数と独立変数（1つのみ）を選択する。

図6の右側にもありますように有意水準（α）
を指定することができます。
（デ

ここでは、従属変数として変数Oxygen、独立変数として変数Groupを

フォルトの値は0.05となります。）

指定します。
3）［分析］タブをクリックし、検定に用いるスコアを選択する。
ここでは、Wilcoxonスコアを用いるので、Wilcoxonを選択します。水
準数が2つである場合には、2標本Wilcoxon検定が算出されますが、3つ以上の水準がある場合には、Kruskal-Wallis 検定となります。
4）［正確なp値］タブをクリックし、［分析］タブで選択したスコアに対して正確なp値を算出する場合には、該当する箇所を選択する。

図7：Tukey法に基づく多重比較の結果

図7では、水準の各組み合わせにおける平均値の差とともに、信頼区間が表示されています。信頼区間に0が含まれている場合には、対応する水準

図8：正確なp値の選択画面

間には差があるというには十分な確証がないとして解釈します。図7では、全ての比較に対する信頼区間に0が含まれているので、全ての水準間に

図8の右側の注釈にあるように、正確なp値の算出には多くの時間とメおいて差があるとはいえないと解釈できます。

モリを使用しますので、必要な場合のみ選択してください。
5）［完了］をクリックする。

図10：［モデルの定義］タブにてモデルの構成を指定

6. おわりに
今回の特集では、データ分析の一手法である分散分析をEG 2.0を使用して行なう方法に関してご紹介しました。特に一要因をモデルに含む場合に関して説明をしましたが、「5. 複数の要因を含めた分散分析」で解説し
図9：Wilcoxonスコアを選択した際の出力結果

たように、より複雑なモデルの場合にも、ポイント＆クリック操作で分析を行なうことができます。本特集における内容がデータ分析をする際の一手

FITNESSデータでは、変数Groupにおける水準数が3つあるので、Kruskal-Wallis検定の結果が図9に表示されています。ここでは、検定統計量であるカイ2乗値（Chi-Square）
として0.3640、該当する漸近的なp値（Pr>Chi-Square）が0.8336と算出されています。
「3.1 1要因に対する分散分析」と同じように、水準間における差があるとはいえないと解釈することができます。

5. 複数の要因を含めた分散分析
ここまでは、1つの要因がモデルに含まれている場合の分析手法に関して説明しました。しかし、EG 2.0では複数の要因をモデルに含めた分析もできます。これらの分析を行なうには、
メニューから［分析］→［分散分析］をクリックし、［線形モデル］を選択してください。
［変数］タブにてモデルに含める要因の変数（量的変数、分類変数など）、従属変数を指定した後、［モ
デルの定義］
タブにてモデルを構成することができます。
（図10参照）
また、［Post-Hoc検定］タブをクリックすることにより、各水準における平均値を算出する要因を指定し、多重比較の手法も含め平均値の算出に関するオプションを選択することができます。
［線形モデル］と［混合モデル］における個々のタブに関する詳細に関しては、EG 2.0のメニューから、［ヘルプ］→［Enterprise Guideヘルプ］をクリックし、［Enterprise Guideタ
スクの実行］→［分散分析］における記述を参照してください。

法として活用していただければ幸いです。

PUT _page_;
PUT "データセット名： &dsn";
PUT "データセットにオブザベーションがありません。";
RUN;
%END;

.
.
●データが0件のときOUTPUTウィンドウにメッセージを出力する%MEND drive;.
●Microsoft Excelへのデータの複数シート出力について.

●データセットのサイズを見積もる方法.

.

%drive(one)●ログ出力のスクロール頻度を変更.

.

%drive(two)●「Jan-03」のようなデータをSAS日付値に変換する●SAS/GRAPHソフトウェアにて透過GIFを作成する●Microsoft Excelに変数名ではなく、変数ラベルを出力する方法について●文字変数値の一部を抽出する方法について●2つのSASデータセットのうち、片方に存在するデータをもう片方から削除する方法●SAS/AFのカスタムクラスの編集について複数のSASデータセットを、1つのExcelファイル（ブック）内●MULTTESTプロシジャ実行時のNOTE出力の意味について

で複数のシートに分けて出力する方法を教えてください。

●LOGISTICプロシジャにおけるカテゴリカル変数のコード化について●SASのバージョン表記について

EXPORTプロシジャでは、同一ブック内の複数シートへの出力はできません。次の2通りの方法で出力する方法があります。

OUTPUTウィンドウへの出力があるプログラムを実行するとき、データが0件だと何も出力されませんが、任意のメッセージ● DDE の機能（Base SAS）を使用してExcelシートに書き込む方法を出力するようにできますか？

● SAS/ACCESS to ODBCを用いてExcelシートに書き込む方法

次のようなプログラムでメッセージを出力できます。下記の具体的な説明とプログラム例をご紹介します。

サンプルプログラムでは、データのあるデータセットと0件のデータセットを作成し、データが0件のデータセットを処理しDDE の機能を使用してExcelシートに書き込む方法
DDEは、Dynamic Data Exchange の略で、Microsoft社が提供している

た際にメッセージを出力するマクロを作成しています。

Windowsアプリケーション間でのデータ交換に広く使用されているプロト/ * サンプルデータセット1 作成*/

コルです（DDEの詳細については、Microsoft社提供、市販されている書

DATA one;

籍などでご確認ください）。SASでは、このDDEプロトコルを利用して、

x=1;

Excelシートにデータを出力することが可能です（※Microsoft ExcelがSASと同じPCにインストールされていることが必要です）。以下のプログラ

RUN;/* サンプルデータセット2（データ0件） 作成*/

ム例では、2つのシートに出力していますが、この部分を適宜変更すること
により、さらに複数のシートに対して書き込むことができます。

DATA two;
STOP;
RUN;

OPTIONS NOXWAIT NOXSYNC;
X "start excel";/* MS Excel を起動 */OPTIONS MPRINT;DATA _null_;%MACRO drive(dsn);

x=SLEEP(10);/* オブザベーション数のカウント */RUN;DATA _null_;/* Excelの起動を10秒待機 *//* 待機時間は環境に応じて変えてください */CALL SYMPUT('cnt',PUT(cnt,5.));
SET &dsn NOBS=cnt;
RUN;

FILENAME ddedata DDE 'excel|sheet1!r1c1:r100c3';/* DDEを利用したエクセル出力 *//* データがあるとき *//* シート１枚目 *//* 乱数を使用して、サンプルを作成します */%IF &cnt NE 0 %THEN %DO;
PROC PRINT DATA=&dsn;

DATA _null_;

TITLE "データセット名 : &dsn";

FILE ddedata;run;

DO i = 1 TO 100;

%END;

x = RANUNI(i);%ELSE %DO;
DATA _null_;
TITLE;FILE PRINT;

y = 10 + x;/* 0件のとき */z = x - 10;
PUT x y z;
END;

RUN;

新規に作成するデータセットに必要なディスク容量を推定す/* Excelへの書き込みを待機 */るために、
データセットのサイズを見積もる計算式はありますか。

DATA _null_;
x=SLEEP(10);RUN;

データセットのサイズは、下記の計算式で概算することができます。

FILENAME ddedata2 DDE 'excel|sheet2!r1c1:r100c3';/* シート2枚目 *//* 乱数を使用して、サンプルを作成します */オブザべ−ション数（

データセットのページ数＝切り上げ

DATA _null_;

ページごとの最大オブザべ−ション数）

データセットのサイズ＝ヘッダー部分のサイズ＋（データセットのページ数×ページサイズ）

FILE ddedata2;
DO i = 1 TO 100;
x = RANUNI(i);y = 20 + x;

新規に作成するデータセットのサイズを見積もる場合には、まず必要な変z = x - 30;

数を含む1オブザベーションのみのダミーのデータセットを作成します。そPUT x y z;

してこのデータセットに対しCONTENTSプロシジャを実行します。

END;/* サンプルデータセットを作成 */RUN;
DATA test ;INPUT a b c d e ;SAS/ACCESS to ODBCを用いてExcelシートに書き込む方法

CARDS;

1）データソースとしてシステムまたはユーザーDSNを事前に定義します。

1 2 3 4 5

データソースの定義は、たとえばWindows 2000の場合は、［スタート］;→［設定］→［コントロールパネル］→［管理ツール］→［データソース

RUN;（ODBC）」の順で画面を開き、データソースを定義します。なお、詳細の定義方法につきましては、Microsoft社提供のヘルプ等をご参照ください。
2）ライブラリを割り当てます。

/* CONTENTSプロシジャを実行 */PROC CONTENTS DATA=test ;RUN;

LIBNAME mylib ODBC DSN=Excel;/*データソース名をExcel とします。*/

CONTENTSプロシジャの出力結果から、「ページごとの最大オブザベー/*上記データソースの設定で定義した名前を指定してください。*/

ション数」と「ページサイズ」が分かります。以下はCONTENTSプロシジ
ャの出力結果の一部を抜粋したものです。

3）複数のシート別に出力します。下記の例では、sashelp.classのデータ-----エンジン／ホスト関連情報 -----

を利用しています。
データセットのページサイズ: 4096
DATA mylib.sheet1a;

データセットのページ数:

1

SET sashelp.class;

データページの先頭:

1

RUN;

ページごとの最大 OBS 数: 101/* 新しくsheet1a を作成 */・・

DATA mylib.sheet2a;
SET sashelp.class;RUN;/* 新しくsheet2a を作成 */データセットの「ヘッダー部分のサイズ」は、Windows版では256バイト、UNIX版では8K（=8×1024）バイトです。これらの数値と想定するオブザベー
ション数を、最初に示した計算式に代入すると、新規に作成するデータセッ

4）SASを終了せずに作成したExcelファイルをExcelから利用するには、

トのサイズを概算できます。Windows版SASで、上記サンプルデータセッ

暗黙的に適用されたロックを解除するために、ライブラリの割り当てを

トTESTと形式が同様でオブザベーション数が1000と仮定したデータセッ

開放する必要があります。

トのおよそのサイズは、次ページのようなプログラムで算出できます。

LIBNAME mylib CLEAR;

なお、Excelへの複数シート出力に関するサンプルのマクロを、下記のURLで公開しています。あわせてご参照ください。
http://support.sas.com/techsup/unotes/SN/006/006695.html

/* データセットのサイズを計算 */AUTOSCROLL=0 を発行した場合

DATA _null_ ;pagenum = 1 + FLOOR(1000/101) ;NOTE: DATA ステートメント 処理 :datasize = 256 + (pagenum*4096) ;処理時間

0.04 秒PUT datasize= ;CPU時間

0.04 秒RUN;※注1 AUTOSCROLLのデフォルト値は、
オペレーティングシステムにより異なります。
※注2 処理時間は参考値です。お使いの環境により異なる場合があります。

ログにdatasize=41216 と表示されます。計算したデータセットのおよそのサイズが41,216バイトくらいになることを表しています。

UNIX版 SAS 8.2

1
LOGウィンドウのデフォルトサイズ（行数）の1/2の値（LOGウィ

Windows版 SAS 8.2

ンドウのデフォルトサイズはディスプレイの解像度により異なる）。
実際の値は、
メニューバーで［ツール］→［オプション］→［プリファレンス］の［詳細］タブにて、［ログ］の項をご確認ください。

ログウィンドウへの出力の際、自動スクロール頻度を変更することはできますか？
コマンドバーまたはコマンド行でAUTOSCROLLコマンドを実行することで、
スクロールの頻度を変更することが可能で「Jan-03」（2003年1月）のように、日付の値がないデータをす。コマンドの構文は、以下のとおりです。

SAS日付値として読み込みたいと考えています。この場合、値を文字列として読み込み、「01-Jan-03」のようにデータを加工した後、INPUT関数を使用しなければならないでしょうか。

AUTOSCROLL n

MONYYインフォーマットを利用することで、「Jan-03」のよnには、受け取ったデータ行がウィンドウ内に収まらないときにスクロール

うなデータを、直接SAS日付値として読み込むことが可能でする行数を指定します。自動スクロール頻度を少なくすれば、プログラム

す。下記に例を示します。

の実行速度が向上します。nの値を0に設定すると自動スクロールを行な
わず、処理終了後に一括してスクロールされます。また、nを1に設定するとDATA sample;

1行づつスクロールされるため、処理時間は長くなりますが、実行中のプロ

INPUT date monyy6.;

グラムの状況をログウィンドウで確かめることができます。次の例では、FORMAT date yymmdd10.;

DMコマンドを使用して、プログラム上からAUTOSCROLLコマンドを発行
しています。

/* monyyインフォーマットを利用 */PUT date;
CARDS;
Jan-03

DM LOG 'AUTOSCROLL 0';/* AUTOSCROLLを0に設定します */Feb-03Mar-03DATA _null_;

Apr-03

DO i=1 TO 10000;

May-03

PUT i 5. +10 i WORDS50.;;/* ログウィンドウに値を出力します */

RUN;

END;
RUN;
上記プログラムを実行した際の、SASログへの出力結果は次のとおりです。
同 様 の 処 理をデフォルトの 状 態 で 行 なった 場 合 の 処 理 時 間と、

2003-01-01

AUTOSCROLLコマンドを発行した場合の実行結果を比較すると、下記

2003-02-01のようになります。

2003-03-01
2003-04-01

デフォルトの場合

2003-05-01

NOTE: DATA ステートメント 処理 :
処理時間

1.92 秒

ログへの出力結果で確認できるように、日付の値がないデータを読み込

CPU時間

1.92 秒

む場合、SASはその値を1日とします。

/* 変数ラベルを変数名にしたデータセットを作成するマクロ */SAS/GRAPHで、透過GIFフォーマットの画像ファイルを作成したいと考えています。
このようなことはできますか？

%MACRO change(libnm,dsnm,odsn);
PROC SQL NOPRINT;SAS System 8から、TRANSPARENCYグラフィックオプシ

SELECT COUNT(name) INTO :nobs

ョンが追加され、SAS/GRAPHで透過GIFフォーマットの画

FROM DICTIONARY.COLUMNS

像ファイルを作成することができるようになりました。次にサンプルプログラムを示します。

WHERE LIBNAME=UPCASE("&libnm") AND
MEMNAME=UPCASE("&dsnm");
SELECT NAME INTO :name1-:name%LEFT(&nobs)

GOPTIONS RESET=all;

FROM DICTIONARY.COLUMNSFILENAME gsasfile 'C:¥temp¥test.gif';

WHERE LIBNAME=UPCASE("&libnm") AND

GOPTIONS DEVICE=gif GSFNAME=gsasfile

MEMNAME=UPCASE("&dsnm");

GSFMODE=replace;
GOPTIONS TRANSPARENCY;

SELECT LABEL INTO :label1-:label%LEFT(&nobs)/* 透過GIFを作成 */FROM DICTIONARY.COLUMNSWHERE LIBNAME=UPCASE("&libnm") AND

TITLE F=kanji '性別毎の身長合計';

MEMNAME=UPCASE("&dsnm");

PROC GCHART DATA=sashelp.class;

QUIT;

VBAR sex / SUMVAR=height;
RUN;

DATA &odsn / VIEW=&odsn;

QUIT;

SET &libnm..&dsnm(RENAME=(

TITLE;%DO I=1 %TO &nobs;%IF "&&label&I" NE "" %THEN %DO;&&name&I = "&&label&I"N

なお、SAS/GRAPHで透過的な出力を作成する場合、GIF以外のデバイ%END;

ス名はサポートされていませんのでご注意ください。

%END;
));
RUN;
%MEND;

SASデータセットをExcelシートにエクスポートする際、1行目/* 利用例 */に変数名ではなくラベルを出力することはできますか？

/* サンプルデータ *//* 日本語のラベルがあるデータセット */Windows版SAS System 8でSAS/ACCESS to PC File

DATA test ;Formatsを利用している場合、Excel形式への出力にはLABEL x='SAS Institute Japan' y='テクニカルサポート';

EXPORTプロシジャを使用できますが、このプロシジャには

x=1; y=2; z=3;

変数名の代わりに変数ラベルを出力する機能はありません。このとき、変RUN;数ラベルを変数名に変換する操作を実施した後で、EXPORTプロシジャを利用する方法が考えられます。
変数名を変更するにはいくつかの方法が考えられますが、次の例ではビュ/* オプションを有効にする */OPTIONS VALIDVARNAME=ANY;ーを利用して出力用にデータセットを作成する方法をご紹介します。なお、
変数名に日本語や空白文字を利用する場合、VALIDVERNAME=ANYオ/* WORK.TESTから変数ラベルを変数名に変換した */プション（評価版）を利用することで表現可能です。この際の変数名の指定方法は、下記のとおりです。

/* データセットWORK.TEST2を作成する */%change(work, test, test2);/* Excel形式ファイルにエクスポートする */'変数名'nPROC EXPORT DATA=test2 DBMS=Excel FILE='c:¥test.xls' REPLACE;※ 変数ラベルが32バイトを超える場合、
そのまま変数名には利用できず33バイト以降が切り捨てられます。このような場合は、適切な修正が必要となります。

RUN;/* オプションをデフォルトに戻す */OPTIONS VALIDVARNAME=V7;

;
下記のようなデータ変換を行なうには、どのようにすればよい

RUN;でしょうか。
DATA trans;
変換後のデータの内容

元のデータの内容

INPUT id name $;CARDS;

男性（20才）男性

2 B

男性（30才）

男性

3 C

女性（20才）女性

5 E

男性（40才）

男性

;
RUN;

いくつかの方法が考えられますが、SCAN関数を利用し、「（」PROC SQL;の前までの文字列を抽出する方法をご紹介します。SCAN

CREATE TABLE master AS

関数は区切り文字で値を区切り、N番目の語を抽出します。

SELECT * FROM master

また、2バイト文字を使用するには、KSCAN関数を使用します。次ページ

EXCEPTのようなプログラムでデータの抽出が可能です。

SELECT * FROM trans;
QUIT;

A test;INPUT dat $20.;
CARDS;
男性（20才）男性（30才）SAS/AFで、各画面で共通に使用するボタン等をクラスとし

女性（20才）て作成保存し、各画面でそのクラスを利用しています。作成
済みのクラスの属性を変更したいのですが、どのようにすれ男性（40才）ばよいでしょうか？

;
RUN;

DATA results;
作成済みクラスの属性は、下記の手順で変更できます。

SET test;/* 全角'（'で値を区切り、1番目の語を抽出 */
dat=KSCAN(dat,1,'（');
PUT dat=;1）SASのエクスプローラウィンドウを表示する（表示されていない場合は、［表示］→［エクスプローラ］で表示する）
2）作成したCLASSエントリが保存されている該当のライブラリから
［カタ

RUN;

ログ］をたどり、作成したCLASSエントリをダブルクリックして開く（または、マウスで選択後に右クリックメニューで［開く］を選択する）。
3）［クラスエディタ］で、該当のエントリに対する編集画面が起動するので、画［Attributes］（属性）などを選択する。
面左側の［クラスプロパティ］から、2つのSASデータセットがあります。片方のデータセットに含ま

4）画面右側に表示される各編集セルにある、［componentDefinition］

れるレコード（オブザベーション）を、もう1つのSASデータセッ

項目の［初期値］を選択すると、枠内に［...］とボタンが表示されるので、トから削除したいと思います。何かよい方法はありますか。

そのボタンをクリックすると、クラスとして保存したフレームの作成時の画面が編集モードで開く。

SQLプロシジャのEXCEPT演算子を使用すると可能です。

5）値を変更して上書き保存する。

下記のサンプルプログラムは、TRANSデータセットに存在するオブザベーションをMASTERデータセットから削除します。
DDATA master;
INPUT id name $;CARDS;

MULTTESTプロシジャを利用して標本再抽出に基づくp値の調整を行なった際、以下のようなNOTEがログに出力されることがあります。
これは、どのような意味でしょうか？

1 A
2 B

NOTE:The multiple testing procedure for this run

3 C

is not closed.In cases with badly heteroskedastic

4 D

data, tests for individual null hypotheses can

5 E

have inflated familywise Type I error rates.

6 F
7 G

MULTTESTプロシジャにおける対比の指定がいわゆる「閉デフォルトであるEFFECTコーディングに従い、係数の指定を行なう例

手順」の状況になっておらず、同時にBOOTSTRAP、または

EFFECTコーディングの場合、以下のように水準数より1つ少ない数のダ

PERMUTATIONオプションを指定して標本再抽出に基づく

ミー変数（X̲1,X̲2）が作成されます。

多重比較を行なうと、適切でない現象、すなわち「ファミリーワイズのTYPE I エラー」をコントロールできない場合があるとの研究があります。

TREAT

X_1

X_2

SAS System 8以降のMULTTESTプロシジャでは、
このような場合に

1

1

0

NOTEとしてログに出力するようになりました。
「ファミリーワイズのTYPE I

2

0

1

エラー」は、多重比較法を適用した際の「第1種の過誤の確率」に相当す

3

-1

-1

るものであり、
この数値が有意水準以下にコントロールされる方法が適切な多重比較法と言われています。米国SAS社のWebサイトでは、「ResamplingBased Multiple Testing」の著者であるWestfallと、MULTTESTプロシ

この場合、変数TREATにおける最初の水準（1）と2番目の水準（2）を比ジャの開発者であったWolfingerによる論文が公開されており、この問題

較する場合には、2行目の係数を1行目の係数から差し引くことにより、について言及しています。

CONTRASTステートメントにて指定すべき係数を求めることができます。
他の比較に関しても同じようにして求められます。その結果、下記のよう●「Closed Multiple Testing Procedures and PROC MULTTEST」にCONTRASTステートメントの係数を指定することになります。

Peter H. Westfall and Russell D. Wolfinger
URL：//support.sas.com/documentation/periodicals/obs/obswww23/

PROC LOGISTIC DATA=one;
CLASS treat;

また、下記の書籍においても「閉手順」に関する理論が紹介されています。

MODEL resp=treat;●「統計的多重比較法の基礎」

CONTRAST '1 vs 2'

treat 1 -1;

永田靖・吉田道弘 著 サイエンティスト社

CONTRAST '1 vs 3'

treat 2

1;

CONTRAST '2 vs 3'

treat 1

2;/* EFFECTコーディングにおける水準の比較 */RUN;
カテゴリカル変数（たとえばTREAT）を含むロジスティック回
帰の分析をLOGISTICプロシジャにて実行しています。
その際、G L Mプロシジャ、G E N M O Dプロシジャと同じように 、CONTRASTステートメントを指定していますが、ログ画面に以下のメッセ

現在利用しているSASでは、起動時のログには『Release 8.2』

ージが表示されます。
このメッセージを回避する方法を教えてください。

と表示されますが、
メニューバーの［ヘルプ］→［リリース情報］
を見ると『リリース 8.02』と表示されます。現在利用している

WARNING: More coefficients than levels specified for effect

リリースはどちらになるのでしょうか。

treat. Some coefficients will be ignored.
いずれの表記も同一のリリースを意味します。リリース番号についての正式決定が出荷直前まで遅れた経緯があり、リリ
LOGISTICプロシジャのCLASSステートメントでカテゴリカ

ース番号を取得する関数の出力情報に食い違いがあります。

ル変数を指定している場合、ダミー変数を作成するデフォル

弊社における正式リリースは「8.2」としていますので、「8.02」を「8.2」とトの方法がEFFECTコーディングとなります。GLMプロシジャ、

読み替えてください。

GENMODプロシジャでは異なる方法（GLMコーディング）でダミー変数を

なお、自動マクロ変数｢SYSVER｣と｢SYSVLONG｣の出力にも同様の差作成しているので、CONTRASTステートメントの係数の指定に注意する

異がありますのでご注意ください。

必要があります。ここでは、メッセージを回避する方法として2つご紹介します。なお、簡単な例として、水準数が3であると仮定します。
PARAM=オプションを用いてGLMコーディングに変更する例

実行例%PUT &SYSVER;%PUT &SYSVLONG;

PROC LOGISTIC DATA=one;
CLASS treat / PARAM=glm;/* GLMコーディングを指定 */ログには、それぞれ下記の値が出力されます。

MODEL resp=treat;
CONTRAST '1 vs 2'

treat 1 -1

0;

CONTRAST '1 vs 3'

treat 1

0 -1;

8.2

CONTRAST '2 vs 3'

treat 01 -1;

8.02.02M0P012301

RUN;

GLMコーディングを用いることにより、GLMプロシジャ、GENMODプロシ
ジャと同じようにCONTRASTステートメントにおける係数の指定を行なうことができます。

SASトレーニングのお知らせ
SAS Institute Japan株式会社では、SASのデータアクセス、管理、解析、
そしてプレゼンテーションの機能をフルにご活用いただくために、
さまざまなトレーニング
コースを開催しています。このたび、8コースの定期トレーニングを2004年1月より順次新規開講します。また、特定の業務・業種・目的に合わせた「プロフェッショ
ナルコース」についても順次開催します。

定期トレーニング 新コース開講■ Accessing and Manipulating Data Curriculum
データへのアクセスと加工
Introduction to Programming
Concepts Using SAS Software

Querying and Reporting Using
Enterprise Guide

SAS プログラミング Basic I

OR

SASによるSQL入門

SASによる多重処理

SAS プログラミングBasic II

SAS Programming II :Advanced Techniques

SASプログラムの最適化

Web Based Training
Basicコース

マクロ言語入門

実践データハンドリング

医薬向け

マクロ言語上級

臨床データマネージメント

集計解析法作成

SAS/ACCESSを使用した
データベースと表形式データの処理方法入門●「SASによるSQL入門」コース●「SASによる多重処理」コース

日程：2004年1月15日（木）〜16日（金）10:00〜17:00（東京会場）

日

程：2004年3月19日（金）10:00〜17:00（東京会場）

価

格：90,000円（チケット捺印数2）

価

格：45,000円（チケット捺印数1）

6月16日（水）10:00〜17:00（東京会場）

4月15日（木）〜16日（金）10:00〜17:00（東京会場）
学習内容：SASプログラムを使用したデータ検索ツールとしてのSQLプ

学習内容：Windows環境を使用し、クライアント／サーバでの分散処理

ロシジャについて学習します。クエリの記述方法、複数のテーと多重処理の実装方法を学習します。

ブルの結合、
ビュー、
インデックス、テーブルの作成方法、
それ・多重処理の概念と設定方法
・クライアント／サーバ環境での多重処理

らの更新や削除の方法について解説します。

・データのダウンロード
・プログラムのリモート実行●「SAS/ACCESSを使用したデータベースと表形式データの処理

・同期、非同期処理の利用方法

方法入門」コース
日程：2004年2月13日（金）10:00〜17:00（東京会場）

価

格：45,000円（チケット捺印数1）

5月11日（火）10:00〜17:00（東京会場）●「SASプログラムの最適化」コース
日程：2004年3月25日（木）〜26日（金）10:00〜17:00（東京会場）

ッドシートのデータの読み込み、書き込みの方法について学習価

格：90,000円（チケット捺印数2）

します。LIBNAMEステートメントのデータベースエンジン、SQL

学習内容：Windows環境を使用し、処理を最適化するためのSASプログ

6月24日（木）〜25日（金）10:00〜17:00（東京会場）

学習内容：SAS/ACCESSを使用したリレーショナルデータベースやスプレ

プロシジャのパススルー機能などについての解説も行ないます。

ラムの実装方法について学習します。

1日目
・メモリ使用量の最適化手法
・処理効率向上のためのプログラミング手法
・データクエリの処理効率向上のための手法
2日目
・データソートの処理効率向上のための手法
・データ結合の処理効率向上ための手法
・データ保存領域削減のための手法●「SASプログラミング速習」コース
日程：2004年3月19日（金）／6月18日（金）10:00〜17:00（東京会場）

価

格：100,000円（チケットのお取り扱いはしていません）

2月19日（木）／5月20日（木）10:00〜17:00（大阪会場）
学習内容：「SASプログラミング Basic I」コース、「SASプログラミング
Basic II」コース、
そして「マクロ言語入門」コースの内容を１日で学習する速習コースです。プログラミング経験のある方を対象に、SASのデータセットの作成方法から基本的なプロシジ
ャの使用法、データハンドリングの方法、マクロ言語の基礎について解説します。なお、自習教材として、「SAS Learning
Edition リリース1.0」がセットとなっています（教材はトレーニ
ング当日お渡しします）。

■ Data Presentation and Reporting Curriculum
データプレゼンテーション・レポーティング
Accessing andManipulating Data
Curriculum

Report Writing

Controlling SAS Output

SASプログラムによるレポート出力ODS入門

SASによるグラフ出力

ODS上級

ODSによるXML出力

2日目●「SASプログラムによるレポート出力」コース
日程：2004年3月18日（木）／6月17日（木）10:00〜17:00（東京会場）

・ODSを利用したHTML出力とポストスクリプトやPCLファイルの作成

価

格：45,000円（チケット捺印数1）

・ANNOTATE機能を利用したプロット図、棒グラフ、マップの作成
・出力グラフの管理とテンプレートを利用したグラフ編集方法

学習内容：REPORTプロシジャの詳細な使用法を、FORMAT、TABULATE、
MEANSプロシジャの利用も絡めて解説します。また、明細表、集計表、クロスタブレポートなどの出力を、ODSを利用して●「ODSによるXML出力」コース

HTMLファイルにする方法なども解説します。

日（木）／3月23日（火）／4月27日（火）／6月10日（木）
程：2004年1月29日●「SASによるグラフ出力」コース

価

格：45,000円（チケット捺印数1）日

学習内容：XMLへの導入とSASデータセットやプロシジャからXMLファイ

10:00〜17:00（東京会場）

程：2004年2月26日（木）〜27日（金）10:00〜17:00（東京会場）
6月3日（木）〜4日（金）10:00〜17:00（東京会場）

価

格：90,000円（チケット捺印数2）

学習内容：Windows環境を使用し、カラーグラフィックの作成、編集、管理についての拡張機能を豊富なサンプルをもとに学習します。
1日目
・グラフテキストの作成と制御方法
・プロット図の作成と編集方法
・棒グラフ、円グラフの編集やデータ分類による統計量の出力
・マップデータを利用したブロックマップやプリズムマップの作成

ルを作成する方法を学習します。XML LibnameエンジンとODS
XML（ODS MARKUP）ステートメントの比較、XMLタグセットの作成や更新の方法についても解説を行ないます。

プロフェッショナルコース

その他、
トレーニングに関する情報については、上記のURLをご参照いた●「医学研究における経時データ解析」コース

だくか、下記＜トレーニング担当＞までお問い合わせください。

日

程：2004年3月11日（木）〜12日（金）10:00〜17:00（東京会場）

価

格：90,000円（チケット捺印数2）

トレーニング担当

受講対象：SASシステムによる統計解析に従事している方●T「医薬向け分散分析」コースを受講済みか、同程度の知識のある方
前提知識：

●F

学習内容：医薬統計専門家により、以下の内容で開催します。
多くの医学研究においては、研究対象者ごとに時間を追って
反応変数を繰り返し測定することがあり、このような研究は経時観察研究などと呼ばれます。その研究目的の一つは、反応
変数と時間、治療効果あるいは他の説明変数との関係を定量的に評価することです。同一対象者内の反応変数には相関が生じることから、統計的に妥当な推論を行なうためには測定単位に起因する相関を考慮する必要があります。そのような反応
変数間の相関を考慮する方法として、線型混合モデルおよび
一般化推定方程式（GEE）による解析方法が近年注目を浴びています。このコースでは、線型混合モデルと一般化推定方
程式の理論的背景について講義し、実際の医学データの解析を通してMIXEDプロシジャやGENMODプロシジャの使用法について学びます。
・ 線型混合モデルおよび一般化推定方程式（GEE）に関する
基本概念の説明・MIXEDプロシジャやGENMODプロシジャの使用法
・医学分野における実データの解析●「SAS Enterprise Minerによる予測モデル」コース
日程：2004年5月24日（月）〜25日（火）（東京会場）

価

格：90,000円（チケット捺印数2）

学習内容：現在準備中です。詳細は右記＜トレーニング担当＞までお問
い合わせください。

復活コースのご案内
下記の3コースについて、今秋より定期トレーニングとして復活しました。
・「ODS入門」コース
・「ODS上級」コース
・「SAS/INSIGHTによるビジュアルデータ解析」コース
今後も多岐にわたったトレーニングコースを追加していく予定です。日程
等の詳細は順次弊社Webサイトに公開しますので、以下のURLをご参照ください。
http://www.sas.com/japan/training/

E L 03-3533-3835
A X 03-3533-3781● E-mail JPNTraining@sas.com

新刊マニュアルのご紹介「Instant ODS: Style Templates for the SAS Output
Delivery System（CD-ROM）」
注文番号：58824
価

最新リリース情報■PCプラットフォーム
Windows版

SAS 8.2

TS2M0

格：5,500円（税抜）「Instant ODS: Style Templates for the SAS Output Delivery System」■ミニコンピュータプラットフォーム

で、SAS Output Delivery System（ODS）のフォーマット化機能をフルに活用できます。このCD-ROMには、50種類のODSスタイル・テンプレート

OpenVMS AXP版

SAS 6.12

TS020

集が収録されています。ユーザーは、業務にすぐに役立つスタイル・テン

OpenVMS VAX版

SAS 6.08

TS407

プレートを簡単に選択でき、また出力形式はHTML、PDF、そしてRTF形式
から選べます。必要なテンプレートを選び、プログラムコードにテンプレー■UNIXプラットフォーム

ト名を付加して実行すれば、最小限のプログラミングだけで視覚に訴える
TS2M0

アウトプットを得られます。このCD-ROMで、初心者から上級者まで、SAS

Tru64版

SAS 8.2のすべてのユーザーがODSの便利さを実感し、業務に役立てることがで

ABI+版

SAS 6.11

TS040

きるでしょう。

SunOS/Solaris版

SAS 8.2

TS2M0

HP-UX版

SAS 8.2

TS2M0「Web Development with SAS by Example」

AIX版

SAS 8.2

TS2M0

注文番号：58694

Linux版

SAS 8.2TS2M0

価

格：9,200円（税抜）

本書はWebプログラミングにおける一般的な導入解説書であると同時に、■メインフレームプラットフォーム

SAS Webツールを使用するためのガイドブックとなっています。本書では、
Webアプリケーション開発の総合的ツールであるSAS AppDev Studio

IBM版（OS/390, z/OS）

SAS 8.2

を題材に、豊富な事例を通して、SASを使ったWeb開発の主要な課題を富士通版（F4、MSP）

SAS 6.09E

TS470

解説します｡SAS AppDev Studioを利用すれば、ユーザーは新たに専門

日立版（VOS3）

SAS 6.09E

TS470

的なツールの難しい操作方法を学ぶことなく、
これまでの経験を活かして

CMS版

SAS 6.08

TS410

Webツールを開発・運用することができます。もちろん、SASが持つ、デー
タの検索、分析、
そしてレポーティングといったSASのパワーをも、Webツールでフルに活用できるため、データ分析やプレゼンテーション作成の労力も軽減できます。
既にSASを活用しているユーザーは、本書のステップに沿って、Web上でのコンテンツ配布を簡単に実現できます。また、SASデータの活用に興味のあるWebサイト開発者は、SASが提供するソリューションのフレキシブ
ルな操作性を実感できるでしょう。

マニュアル販売係●T

E L 03-3533-3835
03-3533-3781● E-mail JPNBooksale@sas.com●F A X

SASマニュアル注文用紙、および最新のPublication Catalog（マニュアル案内パンフレット）は弊社ホームページ（http://www.sas.com/japan/
manual/)にて公開していますので、併せてご利用ください。

TS2M0

発行
テクニカルニュースに関するお問い合わせ先
テクニカルサポートグループ

TEL:03-3533-3877
FAX:03-3533-3781
E-mail:JPNTechnews@sas.com