Comments
Description
Transcript
SAS授業資料 北海道大学文学部(行廣隆次と共著)
情報基盤センター(南館)での SAS の使い方 行廣 隆次1 ・ 大津起夫2 1998 年 4 月 30 日/../2001 年 4 月 20 日/2003 年 7 月版 1 2 前 北海道大学文学部行動システム科学講座助手 (現 京都学園大学) 大学入試センター 研究開発部 (前 北海道大学文学研究科教授)[email protected] 1 目次 第 1 章 はじめに 1.1 1.2 1.3 1.4 本解説の構成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . サンプルデータ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 情報メディア教育研究総合センターのコンピュータ環境 . . . . . . . . . . . . . . . . . . . . 参考書・マニュアル 第 2 章 SAS を動かす 2.1 2.2 2.3 2.4 SAS の起動と終了 . . . . . . . . . . 基本ウインドウ . . . . . . . . . . . . サンプルプログラムによる実行の流れ ファイルの保存と印刷 . . . . . . . . . . . . . . . . (DMS . . . . . . . . . . . . . . . . . . を使う場合) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5 5 5 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 11 11 14 15 第 3 章 SAS プログラムの基礎の基礎 3.1 3.2 3.3 3.4 SAS で使用するデータの構造 . . . . . . . . . . . サンプルプログラムで見る SAS プログラムの構造 基本的な PROC の例 . . . . . . . . . . . . . . . . 出力のサイズに関するオプション指定 . . . . . . . . . . . . . . . . . . . . . . . 第 4 章 DATA ステップの進んだ使い方 4.1 4.2 4.3 4.4 4.5 3 3 3 3 4 割り当て文,条件判断,関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . データの選別 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 欠損値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 複数のデータセットを扱う . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . テキストファイルへのデータ出力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 17 18 18 19 24 第 5 章 グラフを描く 5.1 5.2 5.3 27 グラフを描く PROC の例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 テキストしか表示できない端末でグラフを書くには . . . . . . . . . . . . . . . . . . . . . . 28 PS ファイルの出力: 印刷するために . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 第 6 章 SAS による統計分析 6.1 6.2 6.3 6.4 1 変量ごとの解析 . 2 変量の関係を解析 t 検定 . . . . . . . 回帰分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 第 7 章 データ解析演習 (1) – 調査/テストデータの処理 – 7.1 7.2 7.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 31 33 34 38 41 サンプルデータ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 データを読み込む . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 頻度の集計 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 2 7.4 7.5 7.6 7.7 変数の和を計算する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 統計解析の演習 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Cronbach の α 係数を計算する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 更に必要なこと... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 第 8 章 データ解析演習 (2) – 実験データの処理 – 8.1 8.2 8.3 45 サンプルデータ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 変数変換 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 要因ごとの平均値をプロットする . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 付 録 A 情報メディア教育研究総合センターの利用 49 A.1 センターのコンピュータ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 A.2 他のコンピュータとのデータ交換 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 付 録 B UNIX 環境の利用 B.1 B.2 B.3 B.4 B.5 B.6 B.7 ディレクトリとファイル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . エディタ mule を使おう . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ファイルの情報を調べる . . . . . オンラインマニュアル . . . . . . 複数のファイルを一度に操作する 複数のプログラムを同時に動かす ファイルを整理する 付 録 C DMS を使わない SAS の使い方 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 53 55 55 57 59 60 61 63 C.1 サンプルプログラムによる実行の流れ (2) DMS を使わない方法 . . . . . . . . . . . . . . . 63 C.2 DMS を使う方法と,使わない方法の比較 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 3 第 1 章 はじめに この資料では,北海道大学情報基盤センター(南館)(以下センターと略す) で,統計処理パッケージ SAS を使用する方法を解説する.本資料だけで SAS の使用法をマスターするということではなく,マニュアル や参考書を読むための導入として使用することを想定して書かれている. 1.1 本解説の構成 Chapter 2 では,SAS の基本的な操作方法を解説する.続いて Chapter 3 では,SAS プログラムを書 くためにどうしても欠かせない基本的事項を説明する.とりあえず SAS を最低限使えるようにするには, これら 2 つの Chapter と,その場で必要な統計手法の実行の仕方を解説した資料 (本資料の Chapter 6 以 降や,マニュアル,他の解説書等) を読む必要があるだろう. Chapter 4 では,Chapter 3 で扱わなかった DATA ステップでのデータの様々な操作法について解説し ている.また,Chapter 5 ではグラフの出力方法を扱っている. 最後に,Chapter 7 と 8 では,サンプルデータを使って,実際にデータ解析の演習を行う.また,それ までの Chapter で解説していなかった幾つかの点についても,適宜解説している. 1.2 参考書・マニュアル 本資料は, 市川・大橋・岸本・浜田 「SAS によるデータ解析入門 (第 2 版)」東大出版会 と併用することを念頭において書かれている.文中で教科書やテキストと書かれている場合,上記書籍の ことを指している. また,詳しい内容については,直接 SAS のマニュアルを参照することも必要になるだろう. 1.3 サンプルデータ 本資料中で使用するサンプルデータは,下記のディレクトリ, ~otsu/cl01f0/data からコピーすることができる1 . 例えば,taikaku2.data というファイルをコピーするには, ¶ ³ % cp ~otsu/cl01f0/data/taikaku2.data . µ ´ と,UNIX のコマンドプロンプトから入力する.その他の UNIX 環境の操作方法は,Appendix B および 別資料「UNIX と Mule の使い方」に解説した. 1 一部の,学習者自身が入力の実習をすることを想定しているものを除く. 4 第1章 1.4 はじめに 情報メディア教育研究総合センターのコンピュータ環境 センターでは,次のようなコンピュータが使用できる. 1. パソコン (Windows98) センターおよび学部端末室にあり,利用できる. 実習では使わないが,ワープロや表計算ソフトを始 め,各種アプリケーションや言語が使用できるので,各自調べて利用してよい. 2. 情報メディアセンターのホストコンピュータ (UNIX) ap.ec.hokudai.ac.jp 端末パソコンまたは,その他のネットワークにつながったコンピュータから利用する 3. SAS 利用のための情報メディアセンターのホストコンピュータ (UNIX) sas.ec.hokudai.ac.jp 端末パソコンまたは,その他のネットワークにつながったコンピュータから利用する 4. Splus 利用のための情報メディアセンターのホストコンピュータ (UNIX) splus.ec.hokudai.ac.jp 端末パソコンまたは,その他のネットワークにつながったコンピュータから利用する 各実習室に備えられているのは,全て Windows98 環境のパソコンである.UNIX のホストコンピュー タは,パソコンを端末にしてネットワークを介して利用する.その方法は,Appendix A を参照すること. UNIX ホストコンピュータのうち,SAS が利用できるマシンは,限られている.SAS を利用する場合に は必ず sas.ec.hokudai.ac.jp へ接続すること.また,SAS を利用しない場合には,その他のホストコ ンピュータを利用する. 5 第 2 章 SAS を動かす 本章の目的は,UNIX 上の SAS を,一通り動かせるようになることである. ここでは,SAS の DMS (Display Manager System) 環境を利用した.しかし UNIX 環境に慣れている 者にとっては,mule 等のエディタでファイルを編集し,SAS をコマンドラインから起動した方が便利で あろう.その方法については,Appendix C で説明する. 2.1 2.1.1 SAS の起動と終了 SAS の起動 SAS 実行用 UNIX ホストコンピュータに login した後, ¶ ³ % sas µ と入力する. ´ 2.1.2 SAS の終了 PROGRAM EDITOR ウインドウまたは LOG ウインドウの ファイル メニューから SAS の終了... を選択する. 2.2 基本ウインドウ SAS を DMS 環境で起動すると,次の 3 つのウインドウが開く. • PROGRAM EDITOR ウインドウ プログラムやデータを入力,編集, 実行するウインドウ.(ツールバーも表示される). • LOG ウインドウ プログラムを実行すると,LOG ウインドウに実行の経過やエラーメッセージが表示される. • OUTPUT ウインドウ プログラムを実行し,正常に終了すると,OUTPUT ウインドウに処理結果が表示される. 2.3 2.3.1 サンプルプログラムによる実行の流れ (DMS を使う場合) プログラムの入力 次のサンプルプログラムを,PROGRAM EDITOR ウインドウに入力してみよう. 6 第2章 ¶ SAS を動かす sample1.sas ³ data; input name $ sex $ height weight; cards; Taro M 178.3 73.8 Hanako F 158.3 49.3 Jiro M 168.5 54.2 Ichiro M 172.3 63.5 Michiko F 163.2 48.2 Nozomi F 152.3 45.9 ; proc sort; by sex name; proc print; proc means; by sex; run; µ ´ 操作の仕方は,テキストの p.13 の図表 2.3 にまとめられているが,そのまま全てが使えるわけではな い.カーソル移動は,マウスでも可能.行の削除,行の挿入は,図表 2.3 の操作が使える. ¤ ¡ ¤ ¡ 挿入、上書きモードの変更は£INS ¢キーで行う. 行の削除は行番号の先頭部分に d を入力して£Enter ¢. 複 ¤ ¡ 数行を削除する場合には, 先頭行と末尾行の行番号先頭に dd と入力し£Enter ¢. 行を挿入する場合には行番 ¤ ¡ 号先頭に i, カーソル位置の前に挿入のときは ib と入力し, 同様に£Enter ¢. 行の複製は r(同じ内容がつぎ の行に複製される)を行番号先頭に入力する. コピーを行うには行番号先頭に c と入力し, さらにコピー ¤ ¡ 先の行の先頭(コピーを挿入する前)に a と入力してから£Enter ¢. 指定の行の前にコピーを行うには a の 代わりに b と入力する. コピーでなく行の移動を行うには c と入力するところを m とする. 複数行の複製 やコピー, 移動には rr,cc,mm などを dd と同様に利用できる. 2.3.2 プログラムの実行 PROGRAM EDITOR ウインドウの ローカル メニューから, サブミット を選択する. 2.3.3 結果の出力 LOG ウインドウには各種メッセージが表示される.エラーがなければ,処理結果が OUTPUT ウイン ドウに表示されるはずである.エラーが発生した場合には,LOG ウインドウのエラーメッセージを参考 に,プログラムを修正して再実行する. 2.3.4 プログラムの呼び戻し プログラムを実行 (サブミット) すると,PROGRAM EDITOR ウインドウからプログラムは消えてしまう. これを呼び戻すには,PROGRAM EDITOR ウインドウの ローカル メニューから テキストの呼び戻し を選択する. 2.4. ファイルの保存と印刷 2.4 2.4.1 7 ファイルの保存と印刷 テキストの保存 PROGRAM EDITOR ウインドウにプログラムがある状態で, ファイル メニューから 名前をつけて保存 を選択し,適切なファイル名を入力すると,プログラムをファイルに保存することができる. また同様に,OUTPUT ウインドウに出力結果がある状態で,OUTPUT ウインドウのファイルメニュー から 名前をつけて保存 を選択すると,主力結果をファイルに保存することができる. 一度,新規保存をした後,2 回目から同じファイルに上書き保存する場合には, 名前をつけて保存 では なく 上書き保存 でもよい. 慣習として,SAS プログラムを保存する場合には,sample.sas のようにファイル名の末尾に .sas をつ ける.また,実行結果の保存ファイル名には sample.lst のように .lst を,実行状況ログの保存ファイル 名には sample.log のように .log をつける. 入力したプログラムを sample1.sas というファイル名で,その実行結果出力を sample1.lst というファ イル名で保存してみよう. 保存した結果やプログラムを後から見るには UNIX のコマンドプロンプトから, ¶ ³ % cat sample1.sas % cat sample1.lst µ ´ 等とすると,ファイルの中身が表示される.しかし,ファイルが一画面に収まらない場合には表示がなが れて行ってしまうので, ¶ ³ % more sample1.lst µ または, ¶ ´ ³ % less sample1.lst µ ´ ¤ ¡ ¤ ¡ 等とする.1 画面分表示したら停止するので,£リターン ¢(エンター) キーで一行進み,£スペース ¢キーで ¤ ¡ 一画面分進む.less を使っている時には,£b ¢キーで一画面戻ることができる. 2.4.2 テキストの印刷 ファイルへの出力 まず,出力したい内容をファイルに出力しておく (上記参照).ここでは,file1.lst というファイルを保存 したとする. 印刷 テキストファイルを印刷するには,UNIX のコマンドプロンプトから, 8 第2章 SAS を動かす ¶ ³ % a2ps file1.lst | lp -dpz2n001 µ ´ 等とする.-d プリンタ名 で出力するプリンタを指定する.使用している部屋のプリンタへ出力されるよ う,適切なプリンタ名を選ぶこと. 上記のコマンドでは,テキストが 2 段組で出力される.これを 1 段組にするには, ¶ ³ % a2ps -p file1.lst | lp -dps2n001 µ と,a2ps コマンドに -p オプションを付ける. 2.4.3 ´ グラフの印刷 グラフを印刷するには,SAS で PostScript (PS と略す) ファイルと呼ばれるファイルをあらかじめ作成 し,それをプリンタへ送る.PS ファイルの作成方法は,5.3 で扱う. 印刷イメージの画面での確認 作成した PS ファイルの印刷イメージを,実際にプリンタに出力する前に確認するには,UNIX のコマ ンドプロンプトから ghostview コマンドを用いて, ¶ ³ % ghostview graph1.ps µ のようにする. ´ 印刷 ¶ ³ % lp -dps2n001 graph1.ps µ とする (ps2n001 という名前のプリンタへ印刷する場合). 印刷が終って,もう必要無い時には PS ファイルは削除しておくこと. ¶ ´ ³ % rm graph1.ps µ 2.4.4 ´ 紙を無駄にしないための注意 SAS を DMS モード (SAS のウインドウが開く環境) で実行していると,OUTPUT ウインドウには実 行した処理結果がずっと累積して貯められていく.たくさんのプログラムを実行した後に,これを印刷し ようとしてファイルに保存すると,必要ないところまで保存してしまう場合が多い. こうしたファイルを印刷に用いるならば,保存したファイルから必要なところだけを残して不要な部分 はエディタ等で削除してから印刷すること.UNIX 上でのエディタの使い方は,Appendix B を参照する こと. または (こちらの方がお勧めであるが),SAS プログラムを一つ実行するごとに,OUTPUT ウインドウ の 編集 メニューから すべてクリア を実行してウインドウの内容を毎回消去し,満足できる処理結果が得 られる度に,その内容だけをファイルに保存していくこと. 2.4. ファイルの保存と印刷 9 グラフを印刷する場合にも,ghostview コマンドを使って本当に求めているグラフが作成されているか を画面で確認してから,実際に印刷すること.印刷してみると,何らかのミスで求めているものと違うグ ラフができていてやり直し,といったことはよく起こるものである. 2.4.5 トラブル対策 • SAS がとまってしまった様に見える場合. SAS の DMS ではファイルの Open や書き込みをメニューから選択すると,ファイル名を指定するた めの小さなウィンドウが表示される.このウィンドウが他のウィンドウの背後にあると,SAS の他 のウィンドウがコマンドを受け付けなくなり,止まってしまったように見えることがある. • 利用領域があふれた場合. 大量のファイル,特に PostScript ファイル,画像,C++プログラムの実行ファイル a.out などを多 く保管すると,個人に割り当てられたファイル領域を使い果たしてしまう場合がある.このときに は,rm コマンドを用いてファイルの削除を行なう.rm コマンドは危険 (消したファイルは戻らない) なので,十分注意して作業する. 11 第 3 章 SAS プログラムの基礎の基礎 3.1 SAS で使用するデータの構造 次のサンプルデータを見よ. ¶ Ogawa Tanaka Nakayama Takahashi Okamura Sakakibara F M M F M F 158.2 172.4 180.5 163.2 169.1 154.3 サンプルデータ 48.1 59.2 74.5 51.0 67.2 53.2 ³ µ ´ これは,6 名の人について,名前・性別・身長・体重を記述したものである.名前・性別・身長・体重は変 数 (variable) と呼ばれる.また,データが記述されている各個体 (この場合には人) をオブザベーション (observation) と呼ぶ. 変数には,文字型と数値型がある.ここでは,名前と性別は文字型,身長と体重は数値型である. ここでは,1 オブザベーションのデータを一行に横に並べて書き,変数の間は 1 個以上のスペースで区 切ることにする.他の記述方法も可能であるが,それはテキストを参照すること (7.2 でも少し扱う). 3.2 3.2.1 サンプルプログラムで見る SAS プログラムの構造 ステップ SAS プログラムは,複数のステップから成り立っている.ステップには, • DATA ステップ: データの作成,編集,入出力 SAS データセットを作成する. • PROC ステップ: 表やグラフの作成,各種の分析の実行 SAS データセットを用いて,計算・作表・作図などを行う. がある.また,DATA ステップと PROC ステップの他に,オプション等を設定するパラメータ設定文が 含まれることもある. 3.2.2 文 (ステートメント) 各ステップは複数の文 (ステートメント) から成り立っている.文とは; (セミコロン) で区切られたプロ グラムの記述単位のこと.一行に複数の文を記述できる.また,複数の行にわたる文も記述できる. 大文字か小文字かは無視される.ただし,文字列変数の内容は,大文字と小文字が区別される. 12 第3章 3.2.3 SAS プログラムの基礎の基礎 最初の例 サンプルプログラム ¶ taikaku1.sas ³ data; input name $ sex $ height weight; cards; Ogawa F 158.2 48.1 Tanaka M 172.4 59.2 Nakayama M 180.5 74.5 Takahashi F 163.2 51.0 Okamura M 169.1 67.2 Sakakibara F 154.3 53.2 ; proc print; run; µ ´ DATA ステップの解説 proc data; から,proc print; の前の ; だけの行までが DATA ステップである.各行の意味は, • data; 新しい SAS データセットを作成する. • input name $ sex $ height weight; 4 つの変数を定義し,データを読み込む. 文字型変数には後ろに$ をつける.標準では文字型変数は 英数字 8 文字分までの値を保持する.より長い文字列をデータとして扱う場合には、 input name $ 12 ; のように$のあとに最大の文字数(英数字としての)を指定する. • cards; これ以後に,データを記述する.最後に ; を付けるのを忘れないこと. PROC ステップの解説 proc print; は,SAS データセットの内容を表示するための PROC ステップである. RUN ステートメント プログラム中に run; という文があると,実際に実行される. 課題 3.2.4 上記プログラムを入力し,実行せよ.プログラムは taikaku1.sas というファイル名で保存せよ. データを別ファイルから読み込む方法 実際に統計分析をする場合,一つのデータセットに対して一つの SAS プログラムによる分析しか実行し ないことはまれである.従って,多くの場合には,データはプログラムとは別のファイルに保存して,複 3.2. サンプルプログラムで見る SAS プログラムの構造 13 数のプログラムからそれを読み込めるようにすると便利である. データファイルを作る データファイルの中には,SAS プログラムの中に記述した時と同じような書式でデータ部分のみを記 述する.ここでは,taikaku.data というファイル名で以下のデータセットを作成する.最終行に ; はいら ない. ¶ taikaku.data Ogawa Tanaka Nakayama Takahashi Okamura Sakakibara F M M F M F 158.2 172.4 180.5 163.2 169.1 154.3 ³ 48.1 59.2 74.5 51.0 67.2 53.2 µ ´ ファイルを作るには,エディタ (mule など.mule の使用法は B.2 で解説する.) を使うか,あるいは SAS DMS 環境の PROGRAM EDITOR ウインドウで編集して保存すること. サンプルプログラム 先程のプログラムを,データを別ファイルから読み込むように変更すると, ¶ taikaku2.sas ³ data; infile ’taikaku.data’; input name $ sex $ height weight; proc print; run; µ ´ となる. infile ’taikaku.data’; は,taikaku.data というファイルからデータを読み込む,という指定である. 各変数に説明をつけることもできる. ¶ ³ taikaku2a.sas data; infile ’taikaku.data’; input name $ sex $ height weight; label name="姓 (ローマ字)" ; label sex="性別 (M 男性,F 女性)" ; label height="身長 (cm)"; label weight="体重 (kg)"; proc print; proc freq; run; µ ´ 上の例では, 作成された頻度表に変数の説明が表示される. センターの mule で日本語を入力するには,若干注意が必要なので,最初はローマ字で練習してみる.セ ンターの UNIX システムは,シフト JIS とよばれる日本語のコードを用いている.これは MS-Windows で 14 第3章 SAS プログラムの基礎の基礎 採用されているものと同じである. 課題 データを taikaku.data というファイル名で,プログラムを taikaku2.sas というファイル名で作成 し,実行せよ. 3.3 3.3.1 基本的な PROC の例 PROC PRINT proc print (既出) は,SAS データセットに含まれているデータを表示する機能を持つ. 3.3.2 PROC MEANS 各種記述統計量を計算する.名前は means だが,平均だけを計算するわけではない.デフォルトでは,有 効なオブサベーション数 (N),平均 (Mean),標準偏差 (Std Dev),最小値 (Minimum),最大値 (Maximum) が出力される.その他に多くの統計量がオプション指定によって出力できる. 課題 DATA ステップは, taikaku2.sas と同様とし, ¶ proc means; ³ run; µ という SAS プログラムを作成し実行せよ. ´ 3.3.3 グループ別の処理 男女を混みにして身長や体重の分析をしても,多くの場合意味がないだろう.ある変数の値によって,グ ループを分けて分析するには,BY ステートメントを使用する. PROC ステップに,’BY 変数名’ という文を付けることにより,指定した変数の値ごとにグループ分け して計算が行われる.では,試しに次のプログラムを実行してみよう (DATA ステップは taikaku2.sas と 同じ). ¶ ³ proc means; by sex; run; µ ´ エラーが発生したはずである.BY ステートメントを使用するには,あらかじめその変数に関して並べか えをしておく必要がある. 3.3.4 PROC SORT PROC MEANS は,指定された変数の値に基づいて,オブザベーションを並べ変える.次のプログラム を実行せよ (DATA ステップは taikaku2.sas と同じ). 3.4. 出力のサイズに関するオプション指定 ¶ 15 ³ proc print; proc sort; by sex; proc print; run; µ 最初の proc print と 2 番目の proc print の出力を比較せよ. 3.3.5 ´ グループ別の処理 (2) 次のプログラムを実行せよ.今度はエラーが起きないはず (DATA ステップは taikaku2.sas と同じ). ¶ ³ proc sort; by sex; proc means; by sex; run; µ 3.4 ¶ ´ 出力のサイズに関するオプション指定 ³ options ls=72 ps=20; µ ´ という文をプログラムの最初につけると,実行結果出力のページサイズを指定することができる. この例では,ls=72 は,行の長さ (line size) を 72 桁に,1 ページの行数 (page size) を 20 行にする, という指定である.結果の見やすさのため,最初に付けておくとよいだろう.以後のプログラムでは,得 にこれらのオプションを明記していない.各自が見やすいように,適宜指定すること. taikaku1.sas または taikaku2.sas のどちらかの 1 行目に,上記オプション文を付け加えて実行し,出力 形式が変わるのを確認せよ. 17 第 4 章 DATA ステップの進んだ使い方 4.1 割り当て文,条件判断,関数 4.1.1 サンプルプログラム 次のプログラムを入力して実行せよ.データは外部ファイル (taikaku.data: 3.2.4 で作成した.) から読 み込む. ¶ taikaku3.sas ³ data; infile ’taikaku.data’; input name $ sex $ height weight; dif=height-weight; if dif<105 then warning=’heavy’; proc print; run; µ ´ 出力を見ると,ファイルから読み込んだ変数 (name, sex, height, weight) の他に,二つの変数 (dif, warning) が作成されていることがわかる.これは, • dif=height-weight; 身長と体重の差の変数 dif を作成している. • if dif<105 then warning=’heavy’; dif が 105 未満なら heavy という値 (文字列) を持つ,変数を作成している. 4.1.2 変数の生成 dif=height-weight; や warning=’heavy’; は,割り当てステートメントと呼ばれ,各種計算式を書く ことによって,既存の変数の値を変更したり,新規に変数を生成することができる.テキストの p.30 3-2-3 や p.32 の図表 3.12 を参照せよ. 4.1.3 条件別の処理 if dif<105 then ...; という式は,条件判断をして,処理を決定している.さらに, if dif<105 then warning=’heavy’; else warning=’none’; とすれば,その他の時には warning には none という値を入力することができる.詳しくは,テキスト p.37 3-2-6 を参照せよ. 18 第4章 4.2 DATA ステップの進んだ使い方 データの選別 ある条件に当てはまるデータのみを選び出して,分析をしたい場合もある. ¶ selection1.sas ³ data; infile ’taikaku2.data’; input sex $ height weight; if sex=’M’ then output; proc print; run; µ ´ を実行せよ. サンプルデータファイル taikaku2.data の入手方法は,1.3 を参照すること (以後のサンプルデータにつ いても同様). if sex=’M’ then output; は,変数 sex の値が M のオブザベーションのみ,SAS データセットに出 力する,という意味になる.また,delete はそのオブザベーションを削除するという意味であり, ¶ ³ selection2.sas data; infile ’taikaku2.data’; input sex $ height weight; if sex=’M’ then delete; proc print; run; µ とすると,sex の値が M 以外であるオブザベーションのみが残る.したがって,このデータでは, if sex=’M’ then output; と if sex=’F’ then delete; は,結果的には同じことになる. 4.3 ´ 欠損値 欠損値 (何らかの理由でデータが得られていない) は,データファイル中で ’.’ (ピリオド) により指定 する. 4.3.1 欠損値 taikaku3a.data と taikaku3b.data には,数ヶ所に欠損値が含まれている.データファイルを表示して, それを確認せよ. ¶ ³ % cat taikaku3a.data % cat taikaku3b.data µ ´ 次に,これを SAS で処理するとどのようになるかを確認する.次のプログラムを入力し,実行せよ. 4.4. 複数のデータセットを扱う ¶ 19 missing1.sas ³ data; infile ’taikaku3a.data’; input sex $ height weight; diff = height - weight; proc print; proc means; run; µ ´ proc print の出力において,’.’ を入力したところが欠損値になっていることを確認せよ.また,height と weight のどちらかが欠損値になっているオブザベーションでは diff の値も欠損値になることを確認せよ. また,proc means の出力で,N (有効オブザベーション数) がどうなっているかを確認せよ. 4.4 複数のデータセットを扱う これまでは,一つの SAS プログラムでは一つのデータセットのみを扱って来た.しかし,実際のデータ 分析では,複数のデータセットを連動して扱うことも必要になる. 4.4.1 二つ以上のデータセットを読み込む ¶ twodata1.sas ³ data aclass; infile ’taikaku3a.data’; input sex $ height weight; diff = height - weight; data bclass; infile ’taikaku3b.data’; input sex $ height weight; diff = height - weight; proc print; run; µ ´ のように,一つの SAS プログラム中に二つ以上の data ステップを記述することができる.ここで,data aclass; や data bclass; の,aclass, bclass の部分は,SAS データセット と呼ばれる SAS の作業用 ファイルの名前を指定している.ここまでの例では,SAS データセット名を省略していたが,その場合に は SAS が自動的に名前を付けてくれる. 上記プログラムを実行せよ.proc print; によって bclass の内容が出力されるはずである.proc ステッ プは,特に指定が無い場合には,最も新しく作成された SAS データセットを対象に処理を行う. どの SAS データセットを処理の対象にするかを指定するには,data= というオプションを指定する. 20 第4章 ¶ DATA ステップの進んだ使い方 ³ twodata2.sas data aclass; infile ’taikaku3a.data’; input sex $ height weight; diff = height - weight; data bclass; infile ’taikaku3b.data’; input sex $ height weight; diff = height - weight; proc print data=aclass; proc print data=bclass; run; µ ´ を実行せよ.aclass と bclass の内容が,それぞれの proc print で処理されたはずである. 前節までは,特に SAS データセット名を意識することは無かったはずである.これは,各プログラムで 一つの SAS データセットしか扱っていなかったので,特に処理対象となる SAS データセットを指定しな くても,直前に読み込まれたデータセットが処理対象となっていたためである. 4.4.2 データセットの結合 (1) – 縦に結合する taikaku3a.data と taikaku3b.data は,二つのクラスのデータであるとする.これを一括して処理したい 場合にはどうするか. データファイルを結合する 一つの方法は,taikaku3a.data と taikaku3b.data をまとめた一つのデータファイルを作成しておき,そ れを読み込むことである.二つ以上のデータファイルを一つにまとめる作業は,mule や SAS のエディタ を使って可能である.まず,最初のファイルを開き,次にその末尾に結合するファイルを読みこむ.それ を別のファイル名で保存すればよい. または,UNIX のコマンドプロンプトから, ¶ % cat taikaku3a.data taikaku3b.data >taikaku3all.data µ とすれば,taikaku3all.data に taikaku3a.data と taikaku3b.data を結合したファイルが作成される. ¶ % less taikaku3all.data µ として,出来上がったファイルの内容を確認せよ. ³ ´ ³ ´ 4.4. 複数のデータセットを扱う 21 SAS データセットを結合する SAS データセットに読み込んでかから結合すれば,必要に応じてクラス別に処理することもでき,便利 である.これを実行するには,set ステートメントを用いる. ¶ ³ set1.sas data aclass; infile ’taikaku3a.data’; input sex $ height weight; diff = height - weight; data bclass; infile ’taikaku3b.data’; input sex $ height weight; diff = height - weight; data allclass; set aclass bclass; proc print data=allclass; run; µ ´ を実行して,SAS データセット allclass に,二つのクラスのデータが結合されたことを確認せよ. また, ¶ set2.sas ³ data aclass; infile ’taikaku3a.data’; input sex $ height weight; diff = height - weight; class=’A’; data bclass; infile ’taikaku3b.data’; input sex $ height weight; diff = height - weight; class=’B’; data allclass; set aclass bclass; proc print data=allclass; run; µ ´ 等とすれば,各オブザベーションがどちらのクラスに属しているかというインデックスになる変数 class を 作ることができる. 22 4.4.3 第4章 DATA ステップの進んだ使い方 データセットを分割する 次に,データを複数のデータセットに分割することを考える.taikaku3a.data の内容を,男女別に boys と girls という二つの SAS データセットに格納するには, ¶ div1.sas ³ data boys girls; infile ’taikaku3a.data’; input sex $ height weight; if sex=’M’ then output boys; if sex=’F’ then output girls; proc print data=girls; proc print data=boys; run; µ ´ とする.以前学習した output ステートメントにおいて,出力する SAS データセットを指定できるという ことがポイント. 二クラス分のデータを別々のデータファイルから読み込み,それらを合わせて男女別の SAS データセッ トに格納するには, ¶ ³ div2.sas data aclass; infile ’taikaku3a.data’; input sex $ height weight; class=’A’; data bclass; infile ’taikaku3b.data’; input sex $ height weight; class=’B’; data allboys allgirls; set aclass bclass; if sex=’M’ then output allboys; if sex=’F’ then output allgirls; proc print data=allboys; proc print data=allgirls; run; µ とすればよい. 4.4.4 データセットの結合 (2) – 横に結合する 次のような二つのデータファイルがあるとする.これは,10 名の生徒の中間試験と期末試験の成績であ るとする. ´ 4.4. 複数のデータセットを扱う 23 seisekia1.data 中間試験 NAME FUJIO HAURO HIROSHI JUNKO MIDORI MINORU SUMIO TOHRU TOYOKO YAYOI EIGO1 94 52 59 69 51 85 26 18 91 87 SUGAKU1 78 49 49 72 63 90 71 35 88 91 seisekia2.data 期末試験 KOKUGO1 99 20 20 53 59 77 36 9 79 66 NAME FUJIO HAURO HIROSHI JUNKO MIDORI MINORU SUMIO TOHRU TOYOKO YAYOI EIGO2 81 77 28 73 59 86 43 33 68 82 SUGAKU2 72 39 38 77 60 98 66 34 81 87 KOKUGO2 93 80 40 47 48 71 55 55 34 86 これらをまとめて, NAME FUJIO HAURO HIROSHI JUNKO MIDORI MINORU SUMIO TOHRU TOYOKO YAYOI EIGO1 94 52 59 69 51 85 26 18 91 87 SUGAKU1 78 49 49 72 63 90 71 35 88 91 KOKUGO1 99 20 20 53 59 77 36 9 79 66 EIGO2 81 77 28 73 59 86 43 33 68 82 と結合したい.この場合には,merge ステートメントを使用する. ¶ merge1.sas SUGAKU2 72 39 38 77 60 98 66 34 81 87 KOKUGO2 93 80 40 47 48 71 55 55 34 86 ³ data chukan; infile ’seisekia1.data’; input name $ eigo1 sugaku1 kokugo1; data kimatu; infile ’seisekia2.data’; input name $ eigo2 sugaku2 kokugo2; proc sort data=chukan; by name; proc sort data=kimatu; by name; data gakki; merge chukan kimatu; proc print data=chukan; proc print data=kimatu; proc print data=gakki; run; µ ´ を入力し,実行せよ. オブザベーションの順序が異なる場合には,proc sort を使ってあらかじめキーとなる変数 (この例では name) で sort しておかなければならない ( seisekia1.data と seisekia2.data では,実は同じ順序でオブザ 24 第4章 DATA ステップの進んだ使い方 ベーションが並んでいるため,この例の場合には 2ヶ所の proc sort は無くても動作する). この例では,同じ 10 人分のデータが両データセットに含まれていたので,このように簡単に結合がで きた. 次に,seisekib1.data (中間試験) と seisekib2.data (期末試験) を結合することを考える.まず,これら 二つのデータファイルの内容を各自確認せよ.変数の並びは,上記例と同じとする. ¶ ³ % less seisekib1.data % less seisekib2.data µ ´ これらは,二つのデータファイル間で,オブザベーションの順序が異なっているとともに,異なったオブザ ベーションが含まれている (seisekib1.data には HIROSHI のデータがなく,sekisekib2.data には JUNKO のデータがない).これらを結合するには,両データセットに含まれている変数 name をキーとして指定 する. ¶ ³ merge2.sas data chukan; infile ’seisekib1.data’; input name $ eigo1 sugaku1 kokugo1; data kimatu; infile ’seisekib2.data’; input name $ eigo2 sugaku2 kokugo2; proc sort data=chukan; by name; proc sort data=kimatu; by name; data gakki; merge chukan kimatu; by name; proc print data=chukan; proc print data=kimatu; proc print data=gakki; run; µ ´ 結合後の SAS データファイル gakki では,元のデータセットに含まれていなかったデータは欠損値になっ ていることを,proc print の出力で確認せよ. 4.5 テキストファイルへのデータ出力 SAS の DATA ステップは, テキストファイルからデータを読み込むか, 作成済みの SAS データセットを 指定し, それに操作を加えて新たな SAS データセットを作成する. 作成されたデータセットは SAS でのみ 利用できるものであり, 他のプログラム (自作したものや PC の Execl など) では利用できない. DATA ステップでは,SAS データセットの内容をテキストファイルに PUT ステートメントを指定するこ とにより出力することができる. つぎの例はテキストファイル’taikaku2.data’ より sex(文字型), height,weight, を入力し,weight が 60 以上のものをテキストファイル taikaku2.out に出力する例である. 4.5. テキストファイルへのデータ出力 ¶ 25 taikakuput.sas data; infile ’taikaku2.data’; file ’taikaku2.out’; # 出力ファイル名の指定 input sex $ height weight; if weight >= 60 then put sex weight height; run; µ 出力の際の書式を制御するための命令もかなり豊富に用意されている. 1. カラムを指定する場合(文字型データは左づめ、数値データは右づめになる) put sex 1-5 height 6-15 weight 16-25 ; 2. カラムを指定し, さらに小数点以下の桁数を指定する. put sex 1-5 height 6-15 .1 weight 16-25 .2; ³ ´ 27 第 5 章 グラフを描く 5.1 グラフを描く PROC の例 5.1.1 gchart ¶ gchart1.sas ³ goptions device=xcolor; data taikaku2; infile ’taikaku2.data’; input sex $ height weight; dif=height-weight; proc sort; by sex; proc gchart; vbar height/type=freq; by sex; run; µ ´ を入力,実行せよ. グラフ用のウインドウが開き,男女別に変数 height のヒストグラムが表示されたはずである. goptions device=xcolor; は,画面にグラフィックを表示することを指定する命令である.プリンタ へ印刷する時には,また別の指定をする必要がある (後述). proc gchart は,各種のグラフを書く.テキスト p.97 からを参照せよ.weight や dif のヒストグ ラムも書いてみること. また,テキストを参考に,男女別の height, weight, dif の平均値のグラフを書け. 5.1.2 gplot ¶ gplot1.sas ³ proc gplot; plot height*weight; by sex; µ ´ を実行せよ.data ステップ等は前節と共通とする.身長と体重の散布図が表示される.詳しくは,テキ スト p.120 からを参照せよ. つぎに折れ線を複数描く場合の例を示す. symbol1 などは描画方法を指定している.iterpol は点間の補間方法の指定であり,none は線を引かな い.join は折れ線による補間,spline はスプライン補間という方法を用いている.value はデータ点の描 画方法であり,none は点上に特に記号を描かない. dot は丸印を,diamond は菱形を描く. line は線 28 第 5 章 グラフを描く の種類 (1 は実線,2 は破線) を指定する. 詳細は SAS/Graph のマニュアルを参照. ¶ gplot2.sas ³ data taikaku ; infile ’../data/taikaku.data’; input name $ sex $ height weight; w09 = 0.9*weight; /* w09 は特に意味はないが表示用につくった */ proc sort out=taikaku4; by height; proc print ; run; /* PostScript symbol1 color symbol2 color symbol3 color の場合には color=black を指定する.*/ = yellow interpol=none value=dot; = red interpol=join value=diamond line=1; = blue interpol=spline value=none line=2; axis1 label = (’Height’) minor=none; axis2 label = (angle=-90 rotate=90 ’Weight’) minor=none; /* angle は文字の書き進む方向、rotate は文字の向き、minor は小目盛り*/ proc gplot data=taikaku4; plot weight*height= sex / vref=60 frame haxis=axis1 vaxis=axis2 ; run; proc gplot data=taikaku4; plot weight*height=2 w09*height=3 / href=160 overlay frame haxis=axis1 vaxis=axis2 ; run; proc plot data=taikaku4; plot weight*height=sex ; run; µ 5.2 ´ テキストしか表示できない端末でグラフを書くには グラフィックが表示できない端末から SAS を利用している場合,proc gchart のかわりに proc chart, proc gplot のかわりに proc plot を使用してグラフを書くことができる.この場合には,goptions の 行は必要無い. 上記プログラムを chart, plot を使用するように変更して,どのようなグラフが描かれるかを確認せ 5.3. PS ファイルの出力: 印刷するために 29 よ.グラフ用のウインドウではなく,OUTPUT ウインドウに文字を使ったグラフが表示される. 5.3 PS ファイルの出力: 印刷するために グラフを画面に表示する場合には, ¶ goptions device=xcolor; µ と入力した.プリンタ出力用に PS ファイルを作る場合には,このかわりに, ¶ ³ ´ ³ filename gsasfile ’graph1.ps’; goptions device=ps gaccess=gsasfile gsfmode=replace; µ ´ のような 2 行を入力する.’graph1.ps’ の部分が出力するファイル名なので,適切に付けること.慣習と して PS ファイルには .ps という拡張子を付ける.これを指定した SAS プログラム,例えば, ¶ ³ makeps.sas filename gsasfile ’graph1.ps’; goptions device=ps gaccess=gsasfile gsfmode=replace; data taikaku; infile ’taikaku2.data’; input sex $ height weight; proc gplot; plot height*weight; run; µ を実行すると,graph1.ps ができる. 上の手順は,1 ページ分の図を出力する.図を複数ページ出力するにはつぎのようにする. ´ 1. 出力ファイル graph1.ps をあらかじめ rm コマンドで削除しておくか,mv コマンドで別名に変更して おく. 2. 上の SAS プログラムの goptions の指定のうち, gsfmode を gsfmode=append と変更する. 実際に印刷するには,2.4.3 の説明に従って, ¶ ³ % lp -dps2n001 graph1.ps µ ´ のようにする (-dxxxxxxx の部分には,使用するプリンタ名を適切に指定すること.) SAS プログラムで指定するのではなく、次のようにグラフ出力のウィンドウの指定によってもプリンタ での印刷が可能である. 1. グラフが表示されているウインドウで「ファイル (F)」 → 「イメージのエクスポート (R)」を選択 する. 2. 下部の「ファイルタイプ」で「アドビポストスクリプト *.ps」を指定する.(ワープロなどに取り込 む場合は、他の希望のファイルタイプを指定する) 3. ファイル名を指定する. 例えば mychart1.ps など. 4. 「OK」をクリックする. 以上の操作でポストスクリプトファイル mychart1.ps が作成される. 30 第 5 章 グラフを描く 5. 次に、 UNIX のコマンドモードで、 lp -dpz18001 mychart1.ps のように指定する.(a2ps は使わない). 31 第 6 章 SAS による統計分析 SAS を使って種々の統計手法を実行することは,SAS のプログラムにある程度習熟すれば,それほど難し いことではない.問題は, 1. 自分が必要としている統計手法を正しく SAS に実行させること 2. SAS の出力を正しく読みとること である. 1. については,統計手法を正しく理解し,SAS のマニュアル (あるいは解説書) を読んで必要な PROC や OPTION を選択できることが必要である. また,SAS で統計解析を行うと,非常にたくさんの出力が得られる.自分に必要な情報はそのうちのほ んの一部であることも多い.出力を読みとって,必要な情報を選び出すにも,結局のところ統計手法をよ く理解しておくことが必要となる. この Chapter では,いつくかの基本的な統計解析手法を実行する方法を解説する. 6.1 6.1.1 1 変量ごとの解析 proc means proc means は,各種の要約統計量 を計算するプロシジャである. proc means のデフォルト出力 単に, ¶ ³ proc means; run; µ ´ とだけ記述すると,対象となっている SAS データセットの中の全ての数値変数について,有効なオブザ ベーションん数 (N),平均 (Mean),標準偏差 (Std Dev),最小値 (Minimum),最大値 (Maximum) が 出力される. 分析対象とする変数を限定する 計算の対象とする変数を指定するには, var ステートメントを用いる.例えば, ¶ proc means; var height; run; µ とすれば,変数 height のみについて計算が行われる. ³ ´ 32 第6章 SAS による統計分析 出力する統計量の指定 デフォルトとは違う統計量を出力する場合には,出力したい統計量を proc means ステートメントのオ プションで指定する.出力できる統計量を調べるにはマニュアルまたは教科書を参照すること. 例えば,平均,標準偏差,平均値の標準誤差を出力するには, ¶ ³ proc means mean std stderr; run; µ とすればよい. ´ 統計量の小数点以下の桁数を指定する maxdec オプションを使用する. ¶ ³ proc means maxdec=2; run; µ のように使用する. ´ by ステートメント これは既に学習したが,ある変数の値ごとにグルーピングして処理することを指定する.使用前に,そ の変数で sort しておくことを忘れずに.例えば, ¶ ³ proc sort; by sex; proc means; by sex; run; µ 課題 6.1.2 ´ taikaku2.data について,身長の平均値,標準偏差,分散,歪度,尖度を,男女別に求めよ. 中央値 中央値は,基本的な代表値であるが,proc means では求めることができない.中央値を求めるには, proc univariate を用いる. 6.1.3 グラフを描く 度数分布や,平均値のグラフを描くには proc gchart (または proc chart) ステートメントを用い ることができる.使い方は 5.1 やテキストを参照すること. オプションによって,細かくグラフの形式等を指定することができる.テキストを参照すること.しか し,より詳しい内容を知るには,実習室備え付けのマニュアルを見る必要がある. 棒グラフの表示例を gchart1.sas に示す. 6.2. 2 変量の関係を解析 ¶ 33 gchart1.sas ³ goptions device=xcolor; data taikaku2; infile ’taikaku2.data’; input sex $ height weight; dif=height-weight; proc sort; by sex; proc gchart; vbar height/type=freq ; by sex; run; µ Gchart プロシジャの vbar ステートメントのオプションは次のような意味を持っている. ´ 1. type=freq の代わりに type=percent と指定すると、比率をパーセントで表示する。 2. space=0 と指定すると、棒と棒の表示間隔をゼロにする。 3. midpoints= 開始 to 終了 by 増分 と指定すると、各棒の中央の値を指定することができる。個別 に、midpoints= 値 1 値 2 値 3 ... 値 k と指定することも可能。複数のヒストグラムを比較す る場合には、midpoints が同じになるように設定するのが望ましい。上のデータで、midpoints= 140 to 190 by 5 と指定してみなさい。 課題 6.2 6.2.1 taikaku2.data について,身長と体重のヒストグラムを男女別に出力せよ. 2 変量の関係を解析 2 変量のプロット 2 変量の関係を散布図で見るには,proc gplot (または proc plot) ステートメントを利用する.使 い方は 5.1 を参照すること. 課題 6.2.2 taikaku2.data について,身長と体重の相関図 (散布図) を男女別に出力せよ. 相関係数 相関係数を計算するには,proc corr ステートメントを用いる. ¶ ³ proc corr; run; µ ´ とすると,分析対象となっている SAS データセットの中の全ての数値変数間の全ての組合せ対について 相関係数を出力する. 34 第6章 SAS による統計分析 変数の指定 var ステートメントによって,分析対象とする変数を指定できる.変数 height と weight の間の相関 係数だけを求めるには, ¶ ³ proc corr; var height weight; run; µ ´ とすればよい.当然のことだが,最低 2 個以上の変数を指定しなければならない. 相関係数の種類 デフォルトでは,ピアソンの積率相関係数が出力される.オプションによって, pearson spearman kendall ピアソンの積率相関係数 スピアマンの順位相関係数 ケンドールの順位相関係数 が計算できる.例として,ピアソンの積率相関係数とケンドールの順位相関係数を求めるには, ¶ ³ proc corr pearson kendall; run; µ ´ taikaku2.data について,身長と体重,身長と体重の差,の 3 変数間の相関係数を,男女別に出 力せよ. 課題 6.3 6.3.1 t 検定 対応の無い場合 taikaku2.data について,男子と女子とで身長に差があるかどうかを検定してみよう (差があって当然 と思われるが,これは統計解析の練習だということでお許し願いたい).なお,t 検定は,分布が正規分布 にしたがっていることを前提としている. プログラムの実行 対応の無い 2 群間の t 検定を実行するには,proc ttest を用いる.次のプログラムを実行してみよう. ¶ ³ ttest1.sas data taikaku; infile ’taikaku2.data’; input sex $ height weight; proc ttest data=taikaku; class sex; var height; run; µ ´ 6.3. t 検定 35 proc ttest では,class ステートメントで群をあらわす分類変数を指定する (この場合は sex).ま た,var ステートメントで検定する変数を指定する. 実行結果 実行結果は, ¶ ³ ttest1.lst TTEST PROCEDURE Variable: HEIGHT SEX N Mean Std Dev Std Error Minimum Maximum ---------------------------------------------------------------------------F 30 158.3466667 5.08260952 0.92795330 148.8000000 170.0000000 M 30 174.8833333 5.20729484 0.95071762 166.5000000 185.8000000 Variances T DF Prob>|T| --------------------------------------Unequal -12.4474 58.0 0.0001 Equal -12.4474 58.0 0.0000 For H0: Variances are equal, F’ = 1.05 DF = (29,29) Prob>F’ = 0.8971 µ ´ となる. 上段に,男女別の有効データ数 (N),平均 (Mean),標準偏差 (Std Dev),平均値の標準誤差 (Std Error), 最小値 (Minimum),最大値 (Maximum) が出力されている. 下段には,2 群の分散が等しい/等しく無い場合にそれぞれ用いる,t 検定の結果が出力されている.t 統計量 (T),自由度 (DF),p 値 (Prob>|T|) となっている. 2 群の分散が等しいと考えてよいかどうかは,最終行に情報が出力されている.これは,2 群の等分散性 に関する F 検定の結果が利用できる.ここでは p 値が 0.8971 となっているので,2 群の分散は等し いと考えてよいだろう. 更に詳しい解説は,テキストの p.142 からを参照すること. 体重についても,男女間に差があるかどうかを t 検定してみよ. var ステートメントに変数 weight を指定すればよい.なお,var ステートメントには一度に複数の 変数を指定することもできるので,var height weight; と指定すれば一度に身長と体重の 2 変数につ いて分析することもできる. 課題 6.3.2 対応のある場合 ある特殊な教授方法の有効性を試す実験を実施したとしよう.教授の前後に,英語,数学,国語の試験 を実施し,前後の成績を比較することによって教授法の有効性を確認したい. この場合,同一の生徒が 2 度のテストを両方とも受験しているので,対応のある t 検定を行う. サンプルデータ サンプルデータファイルとして,pretest.data と posttest.data を使用する.pretest.data が事 前テストの英語・数学・国語成績,posttest.data が事後テストの同教科の成績とする. 36 第6章 SAS による統計分析 分析方針とプログラム まず,事前テストと事後テストの英語の得点を比較してみよう.これは,2 回の英語試験得点の差の平 均値が 0 かどうかの検定を実行することに相当する.これには,proc univariate を使用する. 注意) この場合,2 つのテストの難しさに差が無いこと,テストの繰り返しの影響が無いこと,など両 テストが非常に注意深く作られている必要がある.というような条件は実際にはかなり実現困難なもので あり,このような実験計画はお勧めできない.分析の練習課題ということでお許し願いたい. プログラムは次のようになる. ¶ ttest2.sas ³ data pre; infile ’pretest.data’; input name $ eigo1 sugaku1 kokugo1; data post; infile ’posttest.data’; input name $ eigo2 sugaku2 kokugo2; data all; merge pre post; eigod = eigo2 - eigo1; proc univariate data=all; var eigod; run; µ ´ 6.3. t 検定 37 実行結果 実行結果は, ¶ ³ ttest2.lst Variable=EIGOD Moments N Mean Std Dev Skewness USS CV T:Mean=0 Num ^= 0 M(Sign) Sgn Rank 10 0.2 17.96169 0.432563 2904 8980.844 0.035211 10 -1 -1.5 Sum Wgts Sum Variance Kurtosis CSS Std Mean Pr>|T| Num > 0 Pr>=|M| Pr>=|S| 10 2 322.6222 -0.67701 2903.6 5.679984 0.9727 4 0.7539 0.9219 Quantiles(Def=5) 100% 75% 50% 25% 0% Max Q3 Med Q1 Min Range Q3-Q1 Mode 31 13 -2.5 -15 -25 99% 95% 90% 10% 5% 1% 31 31 27 -21 -25 -25 56 28 -25 Extremes Lowest -25( -17( -15( -8( -4( Obs 2) 7) 8) 5) 4) Highest -1( 5( 13( 23( 31( Obs 6) 10) 1) 9) 3) µ ´ となる. N は有効データ数,Mean は 2 つのテスト得点間の差の平均値である.T:Mean=0 が,この平均が 0 か どうかを調べるための t 値である.また,p 値は Pr>|T| に出力されている.p = 0.9727 であるので, ここでは 2 つのテスト間に有意な差は無いということができる. その他の解説は,テキストの p.146 以後を参照すること. 数学,英語についても 2 つのテスト間に差があるかどうかを検定せよ.proc ttest の時と同様に, var ステートメントに複数の変数を一度に指定することができる. 課題 38 6.4 第6章 SAS による統計分析 回帰分析 taikaku2.data のデータについて,回帰分析を実行してみよう.回帰モデルは, (体重) = α + β(身長) + (誤差) とする. 6.4.1 プログラムの実行 男女を込みにして分析すると,おかしな結果が得られることになるので,ここではまず女子のデータの みを分析する. 次のプログラムを実行してみよう. ¶ reg1.sas ³ data taikaku; infile ’taikaku2.data’; input sex $ height weight; if sex = ’F’ then output; proc reg data=taikaku; model weight=height/p; proc gplot data=taikaku; plot weight*height/regeqn; symbol v=* i=rl; run; µ ´ proc reg が回帰分析を実行する proc である.model weight=height/p; の p オプションを付けると, ケースごとに従属変数の値,モデルからの予測値,残差が出力される.プロシジャgplot の symbol ステー トメントで v は表示記号の指定 (*は雌印)、i は描画する点の補間方法の指定を表す。 proc gplot では,plot ステートメントに regeqn オプションを付けることによって,回帰直線を描 くことができる.ただし,symbol ステートメントを指定しないとうまく出力されない. 6.4. 回帰分析 6.4.2 39 proc reg の出力結果 proc reg の結果は次のようになる. ¶ ³ reg1.lst Model: MODEL1 Dependent Variable: WEIGHT Analysis of Variance Source Prob>F DF Sum of Squares Mean Square F Value Model 0.0001 Error C Total 1 74.35101 74.35101 31.043 28 29 67.06266 141.41367 2.39509 Root MSE Dep Mean C.V. 1.54761 50.34333 3.07411 R-square Adj R-sq 0.5258 0.5088 Parameter Estimates Variable DF Parameter Estimate Standard Error T for H0: Parameter=0 Prob > |T| INTERCEP HEIGHT 1 1 0.458720 0.315034 8.95778641 0.05654258 0.051 5.572 0.9595 0.0001 Obs Dep Var WEIGHT Predict Value Residual 1 2 3 47.6000 50.2000 48.5000 47.3358 50.7382 51.0532 0.2642 -0.5382 -2.5532 (途中省略) 29 30 50.8000 53.5000 Sum of Residuals Sum of Squared Residuals Predicted Resid SS (Press) 51.3997 54.0145 -0.5997 -0.5145 0 67.0627 74.8752 µ ´ 中段の Parameter Estimate の行が,回帰式のパラメータの推定値である.推定された回帰式は, (体重) = 0.459 + 0.315(身長) となる. 下段は,ケースごとの従属変数の値,モデルからの予測値,残差の値である. その他に,パラメータが 0 かどうかの検定の結果なども出力されているが,これらの解説は省略する. 回帰分析をよく理解していれば,自ずと理解できるであろう (それがだめでも,マニュアルを読めば理解 できるであろう). 40 6.4.3 第6章 SAS による統計分析 proc gplot の出力結果 各ケースのプロットと,回帰直線が描かれたグラフが表示されたはずである.また,グラフの下に推定 された回帰式が記入されている. 6.4.4 重回帰 proc reg によって,重回帰分析も実行可能である.使い方は省略する.必要ならテキストやマニュア ルを参照すること. 課題 1. 男子のデータについても,同様な回帰モデルに基づく分析を実行してみよ 2. 上記例は,身長から体重を予測するというモデルであった.逆に体重から身長を予測する回帰モデル をたて,それを実行してみよう.また,身長から体重を予測するモデルと,体重から身長を予測する モデルでは,それぞれどんな意味があるだろうか? 考えてみよう 41 第 7 章 データ解析演習 (1) – 調査/テストデー タの処理 – 7.1 サンプルデータ 本 Chapter では,サンプルデータファイルとして,chosa1.data, chosa2.data, chosa3.data を使 用する.データは人工的に作成した仮想例である. 300 人の被験者に対して,二つの心理特性 A, B を測定する質問紙調査を実施した.特性 A を測定す る質問として 20 項目を,特性 B を測定する質問として 25 項目を使用した.質問項目はすべて 1 ∼ 5 までの 5 段階評定である.他に,性別が記録されている. データファイルには,各オブザベーション (被験者) ごとに,被験者番号,性別,特性 A を測定するた めの 20 項目への回答,特性 B を測定するための 25 項目への回答,の順に記録されている. 3 個のデータファイルの内容はほぼ同じである.chosa1.data と chosa2.data は,データの記述形 式が違うだけである.chosa3.data は chosa2.data と同じ形式で入力されているが,一部にミスが混 入している. 7.2 データを読み込む 今回のサンプルデータファイルを読み込むには,これまでに使用していない DATA ステップの用法が必 要である. 7.2.1 chosa1.data を読み込む–1 オブザベーションのデータが複数行にわたる場合 まず,chosa1.data を読み込もう.最初に,chosa1.data がどのように記述されているかを確認せよ. less コマンドが使用できる. 1 オブザベーションが 2 行にわたって記録されている.1 行目には,被験者番号/性別/特性 A 測定 項目が,2 行目には特性 B 測定項目が記録されている.これを読み込むには, ¶ ³ data chosa1; infile ’chosa1.data’; input id sex $ a1-a20 / b1-b25; µ ´ とすればよい. ここで,a1-a20 という記法は,a1, a2, ..., a20 という番号のついた変数並びの省略記法である. b1-b25 も同様である. また,/ は,ここでデータが改行していることを指定する記法である. proc print を付加して実行し,正しくデータが読み込まれることを確認せよ. 42 第 7 章 データ解析演習 (1) – 調査/テストデータの処理 – 7.2.2 chosa2.data を読み込む –フォーマット入力 次に chosa2.data を読み込む.less コマンドを使用して chosa2.data の内容を確認せよ. このファイルは,各オブザベーションが 1 行に記録されているが,特性 A 測定項目 20 項目と,特性 B 測定項目 25 項目が,それぞれ空白で区切らずに続けて記録されている.(これまで使用したデータは 全て変数間が空白文字で区切られていた.) このようなデータファイルを読み込むには,フォーマット入力 を使用する. ¶ ³ data chosa2; infile ’chosa2.data’; input id 3. +1 sex $1. +1 (a1-a20) (20*1.) +1 (b1-b25) (25*1.); µ ´ id 3. は,変数 id を 3 桁で読み込むという指定である.尚,ここでは全ての数値データが整数であ るが,例えば id 3.2 等と指定すれば 3 桁の内 2 桁は小数点以下として読み込まれる. +1 は,次の 1 桁を読み飛ばす指定である (ここには空白文字が入っている). sex $1. は,変数 sex に文字列型で 1 桁を読み込む. (a1-a20) (20*1.) は,変数 a1 ∼ a20 に,1 桁ずつ 20 個を読み込む,という指定である. 再び,proc print を付けて実行し,データが正しく読み込まれることを確認せよ. 他に,カラム入力 と呼ばれる読み込み方法もある.カラム入力および フォーマット入力 についての詳 細は,テキストの第 4 章を参照すること. 7.3 頻度の集計 7.3.1 proc freq データが読み込めたので,まず最初に変数ごとの度数分布表を作ってみよう.この目的には,既習の proc chart や proc gchart を使って度数分布グラフを作ることもできるが,ここでは proc freq を使って 表のみを作成する. ¶ ³ freq.sas data chosa2; infile ’chosa2.data’; input id 3. +1 sex $1. +1 (a1-a20) (20*1.) +1 (b1-b25) (25*1.); proc freq data=chosa2; tables sex a1-a20 b1-b25; run; µ ´ を実行せよ.または,chosa1.data からデータを読み込んでもよい (どちらでも結果は同じになるはずで ある). 変数ごとのデータ分布が確認できたはずである. 7.3.2 データの誤りの発見 次に,同様の分析を chosa3.data のデータに対して実行せよ.chosa3.data には,前述のようにデー タに誤りが混入している.ここでは,a1-a20 と b1-b25 は 1 ∼ 5 の範囲の値しかとらないはずである が,0 や 6 以上の値が含まれている (どこに含まれているかは各自発見すること.一ヶ所ではない).こ うした単純なデータ入力のミスは,集計表を作成することによって発見できる. 7.4. 変数の和を計算する 43 もちろん,この方法では,正しい値の範囲内での間違いは発見できない.多くの場合,データの入力は 人手によることになるが,ミスを残さないように,入力後のデータ確認を十分おこなうこと.できること なら 2 回同じデータを入力して (できれば違う人が入力することがより望ましい),それらに違いが無い かチェックするのがよい. 二つのテキストファイルの違いを発見するには,UNIX の diff コマンド等が使用できる.使い方は UNIX のオンラインマニュアルか,解説書等を参照すること. 7.4 変数の和を計算する 特性 A,特性 B の測定にはそれぞれ 20, 25 項目を使用しているが,それぞれ特性 A 測定 20 項目 の和,特性 B 測定 25 項目の和,を測定値として使用したいとしよう. この場合, ¶ ³ data chosa2; infile ’chosa2.data’; input id 3. +1 sex $1. +1 (a1-a20) (20*1.) +1 (b1-b25) (25*1.); ascale = a1+a2+a3+a4+a5+a6+a7+a8+a9+a10+a11+a12+a13+a14+a15+ a16+a17+a18+a19+a20; bscale = b1+b2+b3+b4+b5+b6+b7+b8+b9+b10+b11+b12+b13+b14+b15+ b16+b17+b18+b19+b20+b21+b22+b23+b24+b25; µ のようにして,変数 ascale と bscale にそれぞれの和を計算することができる. しかし,変数の数が多いとこれは面倒なので,もっとスマートにこれを実行するには, ¶ ´ ³ data chosa2; infile ’chosa2.data’; input id 3. +1 sex $1. +1 (a1-a20) (20*1.) +1 (b1-b25) (25*1.); ascale = sum(of a1-a20); bscale = sum(of b1-b25); µ のように,関数 sum を使用する. 7.5 7.5.1 ´ 統計解析の演習 変数ごとの分析 変数 ascale と bscale について,男女別に,有効データ数,平均値,標準偏差,最大値,最小値等 を算出せよ.また,ヒストグラムを描け. これらの変数の平均値に,男女間で差があるかどうかを検定せよ. 7.5.2 2 変数の関係 変数 ascale と bscale の間の相関係数を,男女別,および男女を込にして計算せよ. また,これら 2 変数間のプロットを作成せよ.男女が別々のシンボルでプロットされるようにすること. 方法は,テキストの p.122 あたりを見ること. 44 第 7 章 データ解析演習 (1) – 調査/テストデータの処理 – 男女別の相関係数と男女込の相関係数を比較せよ.プロットおよび男女間の変数の平均値の差等から,そ の違いの原因を考察せよ. 7.6 Cronbach の α 係数を計算する ここでの ascale や bscale のように,複数の変数の和として測定尺度を定義した場合には,尺度の 信頼性係数の推定値として Cronbach の α 係数を計算することができる.信頼性係数や α 係数の意味 については本資料では解説しないので必要な人は各自学習すること. 特性 A と B についての α 係数を計算するには, ¶ ³ proc corr data=chosa2 alpha; var a1-a20; proc corr data=chosa2 alpha; var b1-b25; run; µ ´ とする.data ステップはこれまでと同じなので各自追加すること. さまざまな出力が得られるが,α 係数は,A については 0.625773 と,B については 0.753724 と, 計算結果が得られた.尚,この結果の次の行の ’for STANDARDIZED variables’ というのは,項目を足 し合わせる前に各項目を標準化 (平均 0 分散 1 に変換) した場合の結果である. 7.7 更に必要なこと... 実際に,質問紙調査やテストデータを解析する場合にはさらにさまざまな分析を行う必要が出るであろ う.例えば,主成分分析や因子分析,重回帰分析などの多変量解析も必要になることが多い. どのような分析が必要かは,研究の対象分野やそれぞれの研究目的によって決まるものである.また, その解析手法を使いこなせるかは,コンピュータや SAS の使い方の問題ではなく,統計学の理解の問題で ある. さまざまな分析手法を SAS で実行するには,解説書やマニュアルを見る必要があるが,それが理解で きない時は,SAS が理解できないのではなくて,使いたい統計手法が理解できていないために SAS の使用 法についての解説が理解できないことが多い. 45 第 8 章 データ解析演習 (2) – 実験データの処理 – 8.1 サンプルデータ 今回のデータも,仮想データである.そのため,実験条件や変数にあえて名前はつけない.データは,サ ンプルファイル 1youin.data と 2youin.data にある. 8.1.1 1youin.data の内容 1 要因 (被験者間要因),2 水準の実験データである. 300 オブザベーションに対して,3 変数が記録されている. 1. 実験条件.文字列変数で,A1 または A2 2. 変数 1 3. 変数 2 二つの実験条件間で,変数 1 に差があるか,また変数 2 に差があるかどうかを調べたいとする. 8.1.2 2youin.data の内容 2 要因 (どちらも被験者間要因) で,最初の要因が 3 水準,2 番目の要因が 2 水準の実験データである. 300 オブザベーションに対して,3 変数が記録されている. 1. 実験条件 1.文字列変数で,A1, A2 または A3. 2. 実験条件 2.文字列変数で,B1 または B2. 3. 変数 1 4. 変数 2 二つの実験条件によって,変数 1 に影響があるか,また変数 2 に影響があるかどうかを調べたいとする. 8.2 8.2.1 変数変換 平均値の差の検定 1youin.data を読み込み,A1 と A2 グループ間で平均値に差があるかを比較しよう.proc gchart を 使って,2 群の平均値のグラフを信頼区間付きで描いてみよう.また,2 群の平均値に差があるかどうかを t 検定してみよう. 46 第 8 章 データ解析演習 (2) – 実験データの処理 – その結果,変数 1,変数 2 どちらとも,A1, A2 間で平均値に有意な差があるという結果が得られたは ずである.しかし更に良く見ると,変数 1 については 2 群の分散の差は有意で無いが,変数 2 については 2 群間で分散に差があるという結果になっている. 実は,このデータは,何も考えずに安易に t 検定をしてはいけないデータだったのである. 8.2.2 分布の形の確認 グループ A1, A2 それぞれについて,変数 1 と変数 2 のヒストグラムを描いてみよう. 変数 1 についてはほぼ左右対象な,正規分布に似た分布をしている.しかし,変数 2 についてはかなり 歪んだ分布をしているはずである. 更に,箱ヒゲ図 (boxplot) を使って,2 群の分布を比べてみよう.箱ヒゲ図のかき方の解説は,テキ ストの p.115 あたりにある.proc univariate か,あるいは proc gplot のどちらかを使って描くこ とができる.実験条件 (グループが) A という文字列変数に,変数 1, 2 が var1, var2 という変数に, 適切に読み込まれているとすれば, ¶ ³ proc gplot; plot var1*a; symbol1 i=box; run; µ ´ で,var1 に関する箱ヒゲ図を描くことができる.同様に,var2 についても処理せよ. この結果をみると,変数 2 については,かなり歪んだ分布形をしており,しかも 2 群間で散らばり (分 散) が異なっていることがわかる.これは,t 検定の前提である「分散の等質性」と「分布の正規性」を 満たしていないということである. proc means か proc univariate を使って変数 1, 2 の歪度や尖度を算出してみよ.変数 2 について は歪度,尖度ともかなり正規分布からのずれを示す数値となっている. 8.2.3 変数変換の例:対数変換 上記のような場合,変数変換を行うことによって,分析手法の前提条件を満たすことができる場合があ る.上記の変数 2 については,変数を対数変換すればよい.ただし,どのような変数変換が可能かは状況 によって異なる.研究や分析の目的から変数変換をすべきでない場合もある.そのような場合には,ノン パラメトリック検定を利用する等を考慮すべきである. さて,変数 2 に対数変換をするには,SAS では, ¶ ³ data data1; infile ’1youin.data’; input a $ var1 var2; var2l = log(var2); µ のように,data ステップで関数 log を使えばよい. 変換した後の変数について,上記と同様に分布形を確認し,また t 検定をしてみよう. ´ 実は,変数 2 を対数変換したものについての t 検定の結果は,変数 1 の t 検定の結果とまったく同じになるはずで ある.これは,人工的にそうなるようにデータを生成したためであり,他意はない. 8.3. 要因ごとの平均値をプロットする 8.3 47 要因ごとの平均値をプロットする 上記例のように,1 要因の実験の場合には,平均値をグラフ化するのは proc gchart による棒グラフ で十分であろう (これは分析結果を眺めるために,という意味であり,美しくグラフを作成して論文には ろうというには他にもいろいろと考えなければいけないが).しかし,2 要因以上の実験結果をグラフ化す るためには,さらにわかりやすいグラフ表示が求められる. ここでは,proc gplot を使って折れ線グラフで 2 要因実験の平均値を示してみよう. 8.3.1 proc summary proc gchart には,変数の平均値を計算してそれをグラフ化する機能があった (上でやったこと).し かし,proc gplot にはそのような機能はない.そこで何らかの方法でまずグループ別に平均値を計算し, それを SAS データセットに書き出す必要がある.これには,proc summary を用いる. 2youin.data を例に解説する. ¶ summary.sas ³ data data1; infile ’2youin.data’; input a $ b $ var1 var2; proc sort; by a b; proc summary data=data1 nway; class a b; var var1 var2; output out=data2 mean=mean1 mean2; proc print data2; run; µ ´ を実行してみよう.SAS データセット data2 に,mean1 および mean2 という変数名で,a b の組合せ 毎に平均値が出力されているのが確認できる. proc summary は proc means と機能は似ているが,その出力を SAS データセットに書き出す. この目的には,nway オプションは必ずつけよう.付けないとどうなるかは各自実行して確認してみよ (あるいはマニュアルを調べてもよい). class ステートメントは,分割するグループを示す変数を指定する. output ステートメントは出力を指定し,out= オプションは出力先の SAS データセット名をしていす る.mean=mean1 mean2 はvar ステートメントで指定した var1 と var2 の平均値を mean1,mean2 と いう変数名で出力することを指定している. 8.3.2 プロット proc gplot を使って折れ線グラフを描くには, 48 第 8 章 データ解析演習 (2) – 実験データの処理 – ¶ ³ proc gplot; plot mean1*a=b; symbol v=x i=join l=1; run; µ ´ のようにすればよい.symbol ステートメントの,i=join がプロットを線でつなぐ指定である.l=1 は 線種を指定している.1 は実線であり,2 以上を指定するとさまざまな破線が使われる.変数 mean2 に ついても同様に描け. 8.3.3 2youin.data の分析について更に... これのグループ間での平均値を比較するには,分散分析を行う必要がある.ここではその方法は扱わな い.分散分析を SAS で実行するには,proc anova や proc glm を使用する. var2 は,1youin.data の変数 2 と同様に歪んだ分布形をしており,正規分布を仮定した分析を行うに は対数変換をするのが望ましい. 49 付 録A A.1 情報メディア教育研究総合センターの 利用 センターのコンピュータ ※重要な注意 うまく動かなくなったからと言って電源を切ってはいけない. 教官, よく分かっている人等に相談する こと. A.1.1 利用できるコンピュータ 1. パソコン (日立 FLORA,Windows98) センターおよび学部端末室にあり, 利用できる. 実習では使わないが, ワープロや表計算ソフトを 始め, 各種アプリケーションや言語が使用できるので, 各自調べて利用してよい. 2. ホストコンピュータ (UNIX) ap.ec.hokudai.ac.jp 端末パソコンまたは, その他のネットワークにつながったコンピュータから利用する. ap1,ap2,ap3 のいずれかにつながる.) (実際には 3. SAS 利用のためのセンターのホストコンピュータ (UNIX) sas.ec.hokudai.ac.jp 端末パソコンまたは, その他のネットワークにつながったコンピュータから利用する.(実際には ap1 につながる.) 4. Splus 利用のためのセンターのホストコンピュータ (UNIX) splus.ec.hokudai.ac.jp 端末パソコンまたは, その他のネットワークにつながったコンピュータから利用する.(実際には ap2 または ap3 につながる.) A.1.2 コンピュータの起動 1. 電源 (本体右下) を入れる. 2. 初期画面が表示されたら, ユーザ ID とパスワード, コース名を入力し, リターンキーを押す (また は開始ボタンをクリックする). コース名:l-0002 (行動科学演習 I のコース ID.アルファベットは必ず小文字で入力すること.) 3. 「∼さん、こんちちは」と出るのでリターンキーを押すか,OK をクリック. 50 A.1.3 付 録A 情報メディア教育研究総合センターの利用 コンピュータの終了 1. 画面左下のスタート をクリックしてメニューを開く 2. Windows の終了 をクリック 3. 原則として PC の電源は切らない A.1.4 UNIX ホストコンピュータへの接続 接続 1. 画面左側のアイコンから UNIX コンピュータ (情報メディア教育研究総合センター) を選択する. 2. login に対してユーザ ID を入力してリターンキーを押す 3. password に対してパスワードを入力してリターンキーを押す (これでホストコンピュータに接続 される). ユーザ ID かパスワードが間違っていた場合にはもう一度入力画面になるので, 入れ直す. 終了 1. コマンドプロンプト (%) に対して,exit または logout と入力して, ホストコンピュータへの接 続を切る. A.1.5 パスワードの管理 パスワードは, 本人を確認する唯一の手段なので, 他人に知られないよう慎重に管理すること. 名前その ままや, 誕生日, 学生番号等, 容易に想像が出来るものを使わない, 定期的に変更する, 等の管理を各自で 気をつける. 1. passwd と入力する 2. 現在のパスワードの入力を求められるので, 入力する (画面には表示されない) 3. 新しいパスワード入力を求められるので, 入力する 4. 新しいパスワードをもう一度入力するよう求められるので, 同じものを入力する A.2 他のコンピュータとのデータ交換 他のコンピュータに入っているデータファイルを,情報メディアセンターで使う方法,および分析結果 等を他のコンピュータへ移動する方法を概説する. A.2.1 フロッピーディスクによるデータ交換 情報メディアセンターの端末パソコン (Windows98 が走っている) には,3.5 インチ 2HD (1.44MB) の フロッピーディスクドライブが付いているので,これを使ってデータのやりとりができる. しかし,Windows98 上でコピーしただけでは SAS 等の UNIX 上のプログラムから使うことはできな い.そこで,UNIX ホストコンピュータへネットワーク経由で転送する必要がある.これには,winftp と いうプログラム (スタートメニューからみつけられるはず) を使用する. A.2. 他のコンピュータとのデータ交換 A.2.2 51 ネットワークを経由したデータ交換 各自の所属する研究室のコンピュータから,ネットワークを通じてデータ交換ができる.これには,ftp というプロトコルを使う.相手が UNIX の一種であれば,ftp というコマンドがあるはずである.Windows 系ならば winftp 等 (上記で使ったもの),Mac ならば fetch 等のプログラムが使えるはずである.正 確なプログラム名は各研究室で尋ねること. A.2.3 ファイル形式に関する注意 テキストデータ データファイルや,分析結果等のテキストデータは,ftp で転送する際に ascii モードで転送するこ と.さまざまな OS 間で異なる改行コードを合わせてくれる. また,日本語を含むテキストを転送する場合は,日本語コードにも注意すること.情報メディアセンター の UNIX コンピュータは SJIS コードを使用している.大抵のパソコンは SJIS コードを使用している ので心配ないが,UNIX 系の OS では EUC コードを使用しているものが多い.他に JIS コードと呼ばれ るコードもよく使われる. グラフィックデータ PostScript ファイルを転送する場合,やはり ascii モードで転送した方がよいであろう. その他のグラフィック形式は,本講義では扱わない.しかし,大抵の場合 binary モードで転送すべき である. 53 付 録B UNIX 環境の利用 基本的に,UNIX はコマンドライン・インターフェイス (コマンド等をキーボードから文字で入力して使う) である. また, コマンド (プログラム) を中心に操作する. コマンドプロンプト (%) に続けて文字を入力 する. B.1 ディレクトリとファイル ディレクトリとは,例えて言えば複数のファイルをまとめて納めておく箱のようなものである.Windows98 や Macintosh のフォルダに相当する. 本節では,ファイルやディレクトリの操作に関するいくつかの基本的なコマンドを解説する.次節以降 で,これらいくつかについては,具体的な使い方を改めて説明する. B.1.1 カレントディレクトリ 現在作業をしているディレクトリ. ¶ ³ % pwd µ で確認できる.pwd は print working directory の略. ´ B.1.2 ディレクトリの移動 cd コマンド (change directory) で移動する. ¶ % cd 移動先名 µ と使う. 例えば, ¶ % cd www µ 等としてみよ. B.1.3 ³ ´ ³ ´ ホームディレクトリ 各自が Login した時にいるディレクトリ. ¶ ³ % cd µ で移動できる. ´ 54 B.1.4 付 録B ファイルとディレクトリのリスト ls (list の略) コマンドを使う. ¶ % ls µ としてみよ. また, ¶ % ls -l µ で詳しいリストを表示. B.1.5 ³ ´ ³ ´ ディレクトリの作成と削除 ディレクトリを作るには, ¶ % mkdir ディレクトリ名 µ とする. ディレクトリを削除するには, ¶ % rmdir ディレクトリ名 µ とする. ただし, 中にファイルが入っていると削除できない. B.1.6 UNIX 環境の利用 ³ ´ ³ ´ ファイル内容の表示 cat コマンドを使って, ¶ ³ % cat ファイル名 µ とする. ´ B.1.7 ファイルの削除 rm (remove) コマンドを使う. ¶ ³ % rm ファイル名 µ B.1.8 ´ ファイル名やディレクトリ名の変更 mv (move) コマンドを使用. ¶ ³ % mv 変更前ファイル名 変更後ファイル名 µ ´ B.2. エディタ mule を使おう B.2 55 エディタ mule を使おう mule は,UNIX 上の高機能なエディタ (文書ファイルを作成,編集するプログラム) である.また,mule の中から各種ネットワーク上のサービスを利用すること等もできる.そのため,UNIX を利用するには,早 めに習熟しておくと便利である. B.2.1 mule 起動とチュートリアルの実行 • まず, ¶ ³ % mule µ ´ で,新しいウインドーが開き mule が立ち上がる. ¤ ¡ ¤ ¡ • £Ctrl+H ¢ £T ¢ (T は必ず大文字で入力すること) と入力し,言語を聞いてくるので Japanese と入 力する. • チュートリアルが始まるので,それにしたがって練習する. B.3 ファイルを整理する SAS 実習用の UNIX コンピュータに login して,各自のホームディレクトリ (login した時にいるディ レクトリ) をみると,たくさんのファイルができていることであろう.どのファイルに何が入っているの かわからなくなる日も近いかもしれない. ここでは,まずファイルを整理するためのテクニックを紹介する. B.3.1 ファイル名に規則を付ける これまでの実習で使ってきたファイルには,データファイルであれば filename.data とうように .data を必ず最後につけた.また,SAS プログラムであれば .sas を付け,分析結果を保存するファイルには .lst を付けるように指導してきた.このように,ファイル名の付け方に一定の規則をもうけておけば,後 で見て,それぞれのファイルの内容がわかりやすい. 今,.data, .sas, .lst のそれぞれで終るファイル名のファイルだけをリストするには,ぞれぞれ, ¶ ³ % ls *.data % ls *.sas % ls *.lst µ ´ とすればよい.* はワイルドカードと呼ばれる.この場合,* はそこに任意の文字列の入ったファイル名 に一致する. B.3.2 ディレクトリに分類する ディレクトリは,ファイルを入れるための容器のようなものと考えればよい.また,階層的にディレク トリの中にディレクトリを作ることができる.これは,容器の中にさらに細かい分類のために小容器をい くつか入れる,その小容器の中にさらに細かい分類のための容器を入れて... よう. といったイメージで考え 56 付 録B UNIX 環境の利用 UNIX に login すると,最初は各ユーザのホームディレクトリと呼ばれるディレクトリにいる. 現在いるディレクトリを調べる 現在いるディレクトリを調べるには, ¶ ³ % pwd µ ´ とする.login 直後に実行すると,各自のホームディレクトリ名が表示されるであろう. ディレクトリは,階層的な入れ子構造になっているが,その位置をあらわすためには,上位のディレク トリから / で区切って下位へと構造を並べて表記する. ディレクトリを作る では,ホームディレクトリの中にさらにいくつかのディレクトリを作ってみよう. ¶ ³ % mkdir ディレクトリ名 µ ´ で,新しいディレクトリを作ることができる.例えば,今日の実習関係のファイルは全て work1 という ディレクトリに入れておくことにすると, ¶ ³ % mkdir work1 µ ´ で,そのディレクトリを作ることができる.さらに,その中に課題ごとにディレクトリを作ることもできる. ディレクトリを移動する ディレクトリを移動するには,cd コマンドを使う.今作ったディレクトリに入るには, ¶ ³ % cd work1 µ ´ とする.これを実行し,次に pwd コマンドで移動したことを確認せよ.ここでファイルを作れば,この ディレクトリの中にファイルを作成することができる. また,SAS DMS の中からファイルを保存する時にも,どこのディレクトリに保存するかを指定すること ができる. 一つ上位のディレクトリへ戻るには, ¶ ³ % cd .. µ ´ とする. この移動先の指定は,現在いるディレクトリ (カレントディレクトリ) から相対的に上や下へ移動する方 法である.これに対して,フルパス名 (先頭が/ で始まるディレクトリ表記.pwd コマンドで表示される もの) を指定すると,カレントディレクトリがどこであろうと,一度に移動先を指定できる. また単に, ¶ ³ % cd µ ´ と,移動先を指定しなかった場合には,その前にどこのディレクトリにいようとも,ホームディレクトリ へ移動する. B.4. ファイルの情報を調べる 57 別のディレクトリへファイルを移動する 既につくられているファイルを,ディレクトリへ分類するにはどうすればよいか.ファイルを移動する には,mv コマンドを使用する.file1 というファイルを work2 というディレクトリを作ってその中に 移動するには, ¶ ³ % mkdir work2 % mv file1 work2 µ とする. B.4 B.4.1 ´ ファイルの情報を調べる ls コマンド ファイルのリストをみるためには,ls コマンドを使う.また,リストするディレクトリを指定したり ( ls ディレクトリ名),指定したファイルだけをリストする ( ls ファイル名 1 ファイル名 2 ...) す ることができる. -F オプション ls コマンドに -F オプションを付け, ¶ ³ % ls -F µ ´ とすると,ディレクトリ名には,最後に / が付いて表示される. また,最後に * が付いて表示されるファイルもあるかもしれない.これは,実行可能なコマンドファイ ルであることを表す (ただし,おそらく現在はホームディレクトリにはこれに該当するファイルは無いで あろう). -l オプション -l オプションを付けると,更に詳しいファイルの情報を知ることができる. ¶ % ls -l µ によって出力された結果のサンプルを以下に示す. ¶ drwx-----2 yukihiro -rw-r--r-1 yukihiro drwxr-xr-x 2 yukihiro -rw-rw-rw2 yukihiro lrwxr-xr-x 1 yukihiro ^^^^^^^^^^ ^^^^^^^^ A B µ それぞれのカラムは, A ファイルモード (後述) inst inst inst inst inst ^^^^^^^^ C 24 164 1024 840 14 ^^^^^ D ³ ´ ³ 6 10 11:48 6 21 12:58 6 21 12:49 6 3 15:29 5 27 17:21 ^^^^^^^^^^^ E Mail sample1.sas sas_progs taikaku2.data temp ->/temp/yukihiro ^^^^^^^^^^^^^^^^^^^^^ F ´ 58 付 録B UNIX 環境の利用 B そのファイルの所有者のユーザ名 C ファイルが属するグループ名 D ファイルサイズ E 最後にそのファイルを変更した日時 F ファイル名 を表す. UNIX はマルチユーザのシステムであるので,ファイルが誰のものかを記録しておく必要がある.また, 各ユーザは一つ以上のグループに属している.筆者 (yukihiro) は inst という教官用のグループに属し ている.諸君は user という学生のグループに属しているはずである.その他,受講している講義ごとの グループにも属することがことができる (使い方は省略). B.4.2 ファイルモード ファイルモードは,10 文字のフラグで表される.- はそのフラグがオフであることを表す. 最初 (一番左の文字) は,d (ディレクトリ),l (シンボリックリンク),- (一般のファイル) のどれか である. シンボリックリンクとは,ファイルやディレクトリの実態は別のところにあるが,それを参照すること によってあたかもそこにファイル/ディレクトリがあるように扱える仕組みである,詳細は省略. その後の 9 文字は,3 文字ずつ組になっている. 第 2,5,8 フィールド r/- のどちらか.r ならファイルを読むことが可能. 第 3,6,9 フィールド w/- のどちらか.w ならファイルに対して書き込みが可能. 第 4,7,10 フィールド x/- のどちらか.ディレクトリの場合には,x ならば,そのディレクトリの中を読 むことが可能.ファイルの場合には,x ならばそれが実行可能コマンドファイルであることを示す. これらが,3 フィールドある理由は次の通り. 第 2∼4 フィールド そのファイルの所有者に対するモード. 第 5∼7 フィールド そのファイルのグループに属するユーザに対するモード. 第 2∼4 フィールド それ以外のユーザに対するモード. 例えば, drwx------ 2 yukihiro inst 24 6 10 11:48 Mail は,ディレクトリで,所有者は読み込み書き込み,中を読むことができるが,その他のユーザには読み書 きできない.このディレクトリの中にはメールが保存されているので,他人からはみれないようになって いる. また, -rw-r--r-- 1 yukihiro inst 164 6 21 12:58 sample1.sas は,ファイルで,所有者には読みだし/書き込みとも可能.その他のユーザからは読み出しは可能である が書き込みは不可である. B.5. オンラインマニュアル -rw-rw-rw- 2 yukihiro inst 59 840 6 3 15:29 taikaku2.data は,誰からでも読み出し/書き込み可能で,他人に勝手に内容を変更されてしまうかもしれない,という ちょっと危ない設定である. ----rw-rw- 1 yukihiro inst 164 6 21 12:58 foo.data というようなファイルを作れば,所有者からは読み書き不可であるが,その他の人からは読み書きとも可 能,という変なファイルを作ることもできる (普通は意味がないが). B.4.3 ファイルモードの変更 ファイルモードを変更するには,chmod コマンドを使用する.例えば, ¶ ³ % chmod ug+w foo.data µ ´ のようにする.これは,foo.data というファイルを,所有者とグループに対して書き込み可に設定する. 一般に,chmod コマンドは, • u : user (所有者に対する指定) • g : group (グループに対する指定) • o : other (その他のユーザに対する指定) に対して, • + : 指定フラグをオンにする • - : 指定フラグをオフにする という操作を,指定ファイルに実行する.+/- の後には,r, w, x 等を指定する (他にもあるが,ここで は省略). chmod コマンドは,ファイルの所有者か,スーパーユーザ (特権を持ったシステム管理者) しか実行で きない. これらのファイルモードの指定によって,他人にみられたく無いファイル,また逆に他人から参照して 欲しいファイル,等を管理することができる. また,間違って変更しては困る大事なファイル (データファイルなど) は,所有者に対しても書き込み不 可にしておくと比較的安全である.(書き込み不可にしておいても削除はできるので絶対安全ではない.) B.5 オンラインマニュアル man コマンドによって,画面上でコマンドの使用法を見ることができる.紹介したコマンド類は,全て の使い方が示されているわけではない.詳しくは適当な書籍等を参照するか,あるいはオンラインマニュ アルを見ること. ¶ ³ % man コマンド名 µ で,コマンドの解説が表示される.例えば, ´ 60 付 録B UNIX 環境の利用 ¶ ³ % man ls % man chmod µ ´ 等を実行してみよ. ただし,オンラインマニュアルはある程度コンピュータについて知識がないと相当わかりにくい.理解 できなくても悲観することはない.その場合には,他のリファレンスを活用せよ (解説書,詳しい人,等). B.6 複数のファイルを一度に操作する UNIX のファイル操作コマンドの多くは,一度に複数のファイルを指定して処理ができる.例えば, ¶ % rm file1 file2 file3 µ とすると,file1, file2, file3 の 3 個のファイルを一度に消すことができる.また, ¶ ³ ´ ³ % mv file1 file2 file3 dir1 µ ´ とすれば,file1 file2 file3 をまとめて dir1 というディレクトリに移動することができる.ここで, dir1 は必ず存在するディレクトリ名でなければならない.同様に, ¶ ³ % cp file1 file2 file3 dir1 µ は,file1, file2 file3 を dir1 というディレクトリにまとめてコピーする. B.6.1 ´ ワイルドカードを使う さらに,ワイルドカードというものを使って,複数のファイルをまとめて便利に指定することができる. 上記の実習で, ¶ ³ % ls *.data % ls *.sas % ls *.lst µ ´ という指定をしたが,*.data は .data で終るファイルを全て書き並べたのと同じことになる.* は任 意の文字列にマッチする.また,? は任意の文字列にマッチするので, ¶ ³ % rm file1 file2 file3 µ は, ¶ ´ ³ % rm file? µ ´ と書き換えられるかもしれない (file4 とか file0 とかが存在したら同時に消去されてしまうので,注意). file* は,file にも file1 にも file2 にも file12 にもマッチする.file? は file1 や file2 にはマッチするが file や file12 にはマッチしない. 他にも,更に細かい指定のできるワイルドカードが存在するが,ここでは省略する.興味のある者は UNIX の解説書等を参照して欲しい. B.7. 複数のプログラムを同時に動かす B.7 61 複数のプログラムを同時に動かす SAS を使っていて,ファイルの操作をするために UNIX のコマンドラインに戻りたい時があるだろう. また,データを編集するために,途中でエディタが使いたくなることもあるかもしれない.このような時 に一旦 SAS を終了するのは不便である. UNIX はマルチタスクの OS (複数のプログラムを同時に実行できる) なので,SAS を終了することなく 他のプログラムを実行することができる. B.7.1 複数のコマンド入力用ウインドウを立ち上げる UNIX に login すると,コマンドが入力できる一つのウインドウが開いているはずである.これをあら かじめ複数にしておこう. ¶ % kterm & µ あるいは, ¶ ³ ´ ³ % mjpterm & µ ´ とすると,新しいウインドウが開く.2∼3 個開いておくと便利なことが多い. 行末の & は,そのプログラムをバックグラウンドで実行する指定である.これを付けないと,kterm あ るいは mjpterm を実行したウインドウには,実行した kterm/mjpterm を終了するまで次のコマンドプ ロンプト (%) が出て来なくなるので,複数のウインドウを開いた意味が無くなる. kterm と mjpterm の違いはあまりない.kterm は標準的なプログラム.mjpterm は日立独自のプロ グラムで,Windows98 の仮名漢字変換機能で日本語を入力することができる (kterm でも,UNIX の機能 で日本語を入力することはできる). B.7.2 プログラムのサスペンド 不幸にして,login してすぐに SAS を実行してしまったとしよう.その他のウインドウが開いていな い場合には,SAS を終了するしか無いのか? この場合には,login したウインドウに戻り (SAS を実行した状態になっているので,プロンプトは出 ¤ ¡ ていないはずである),£Ctrl+Z ¢ (コントロールキーを押しながら Z キーを押す) を入力すると,コマン ドプロンプトが出る. これは,プログラムをサスペンドした,といい,この場合には SAS の実行を一時的に中断してコマン ドプロンプトに戻ったことになる (この時 SAS は実行が中断されているので,SAS のウインドウをマウ スで選択しても,動作しない).ここで他の操作を実行したり,または別の kterm/mjpterm 等を開いた りしたのちに,SAS に戻ればよい.サスペンドしたプログラムに再び戻るには, ¶ ³ % fg µ とする.または, ¶ ´ ³ % bg µ ´ とすると,サスペンドしているプログラムをバックグラウンド実行に移すことができるので,そのウイン ドウ (コマンドラインが出ているところ) も,SAS も切り替えて同時に使用できるようになる. 62 付 録B UNIX 環境の利用 ※注意 それなら最初から, ¶ ³ % sas & µ ´ と,SAS をバックグラウンドで起動すればよいと考えるのだが,これではうまく起動しなかった.一旦起 動してから,サスペンドして,バックグラウンド実行に変更するのは可能. 63 付 録C C.1 C.1.1 DMS を使わない SAS の使い方 サンプルプログラムによる実行の流れ (2) DMS を使わない方法 プログラムの作成 好みのエディタ (ここでは mule を使用するものとして説明する) で,プログラムを入力し,ファイル に保存する. ¶ ³ % mule & µ ´ で,まず mule を起動しておくと便利.最後の & は,mule をバックグランドで実行して,コマンド入力 ウインドウは,mule を終了することなく使用できるようにするため. ¤ ¡ ¤ ¡ mule の中でプログラムを入力する.入力できたら,£Ctrl+X ¢ £Ctrl+W ¢ (最初にファイル名をつけて ¤ ¡ ¤ ¡ 保存する場合) または £Ctrl+X ¢ £Ctrl+S ¢ (既にファイル名が指定されている場合) で保存する.mule を終了する必要はない. mule のウインドウの左上の File メニューから, ファイルの保存 を実行することも可能.ただし, これは X-Window 環境で mule を実行していない場合にはできない. C.1.2 プログラムの実行 sample1.sas というファイルに SAS プログラムを保存したとする.UNIX のコマンドプロンプトが表 示されたウインドウを選択し, ¶ ³ % sas sample1.sas µ で,SAS プログラムが実行される. C.1.3 ´ 実行結果の参照 ファイル sample1.log に実行状況が,sampole1.lst に処理結果が出力されているはずである. ¶ ³ % ls sample1.log sample1.lst sample1.sas ...(その他のファイル) µ として,出力ファイルが作成されたことを確認せよ.また, ¶ ´ ³ % less sample1.log % less sample1.lst µ 等として,実行結果を確認せよ. ´ 64 付 録C C.1.4 DMS を使わない SAS の使い方 更に続けて処理する場合 mule を終了していないので,mule の中にプログラムが残っているはずである.mule のウインドウを 選択して,内容を更に編集してから保存し,再び実行すればよい. C.2 DMS を使う方法と,使わない方法の比較 最終的には,どちらを使うかは好みの問題である.UNIX 上では SAS しか使わないという人には,DMS の方が便利かもしれない.普段から mule を始め,UNIX をいろいろと使っている人には,DMS の操作環 境は馴染みにくいと感じるだろう (汎用コンピュータの操作方法に基づいているため). 以下に,それぞれの特徴を簡単に上げておく. C.2.1 DMS の利点と欠点 • SAS の環境の中で,プログラムやデータの入力,実行,結果の確認と,一通りのことが全てできる ので,その他のプログラムを覚える必要も少ない. • プログラムの実行等,コマンドがマウス操作によって実行できる. • 逆にいえば,SAS DMS 独自の操作を習得しなければならない. C.2.2 DMS を使わない場合の利点と欠点 • 汎用のエディタを使うことができるので,他のプログラムの利用と同じ操作方法が利用できる. • 複数のプログラムを連係して使うことになる. • しかし,マルチウインドウ環境で,エディタとコマンド実行環境用のウインドウを同時に起動してお けば,エディタでプログラムファイルを保存する,コマンド実行用ウインドウに移動して SAS コマ ンドを実行する,と,一連の処理がある程度スムーズに実行できる.