SASを使ってみよう

統計モデル解析特論I/II : 第10回 (12/14/21)

 前回、SASの利用環境(アクセス、サインイン等)を整えてもらったので、 今週は早速SASプログラムを組んでみよう。 SASプログラムの構成(構造)を解説すると共に、 データをファイルから読み込んで実行するための諸方法(プログラムとデータの分離)も紹介する。
 なお、今回(第10回)と次回(第11回)は対面講義を予定しており、「密」にならないよう、COVID-19対策を考慮して開講するので協力をお願いしたい。なるべく長めの延長ケーブルを持参するつもりである。
  1. 受講希望: 10名
    1. 受講動機
      • ソフトウェアを通じて、実際に統計分析を行えると聞いて受講を希望しました。統計モデル解析特論Ⅰでは様々な統計分析手法について知ることができましたが、実践を通じた経験もすることで、統計データの扱い方についてより理解が深まるのではないかと期待しています。研究に限らず、社会に出てからも必ず統計量に接する機会もあると思うので、講義を通じてデータの取り扱い方の基本的な考え方についても学ばせていただければと思っております。
      • 研究で統計学を用いるため,この講義で学んだことを研究に活かしたいと思ったため.
      • 前半の講義である統計モデル解析特論Ⅰの内容を実践的に体験できると思ったから.
      • 卒業論文で、分析の難しさと面白さに気づき、修士論文で分析の幅を広げたいと思ったから。
      • 統計モデル解析特論1の授業を受けて、授業に興味を持ちました。
      • 統計モデル解析特論1を受講して、実際に統計データの扱いについて勉強しようと思い受講を決めました。
      • 統計モデル解析特論Ⅰでは、統計学の一部分ではあるが知識として学ぶことができた。このような知識を学ぶ機会は学部にもあったが、ソフトを用いた体系的な講義はなかった。そのためⅡを受講し、統計学に触れるkとでより理解が進むと考えたため。
      • 統計モデル解析特論Ⅰで統計に対する考えを学んだ上で、実際のデータを用いて実践したいため。
      • 統計モデル解析特論Ⅰの授業を受けましたから、その続きとして統計モデル解析特論Ⅱも受講したいです。
        Ⅰの授業に論理的な知識を学び、SASの実践的なデータ分析も挑戦してみたいです。卒論はもちろん、将来仕事場も、いろんな場面で統計知識が必要されている。以前はSASを使ったことないので、この授業により、SASを用いてシステム的な統計分析を学びたいです。
      • 統計解析ソフトの仕様を通じて、理解を深めたいため。
    2. 取り入れてもらいたい講義内容
      • 重回帰分析
      • 多変量解析全般
      • 特定の希望はありませんが、多様なデータを取り扱っていただけると幸いです。
    3. 講義形態として、対面講義とリモート講義のどちらを希望するか。もしくはどちらでも良いか。(意見聴取ですので、ご希望に副えない場合があります)。
      • リモート講義 x8名
      • どちらでも良い x2名
    4. その他、お気づきの点等があればお書きください。
      • インターン参加などで、対面講義等の受講が難しい日が出てくるかもしれません。その場合はメールでご連絡すればよろしいでしょうか。

  2. 先週のショート課題: 10名

  3. [おさらい] SAS OnDemand for Academics へのアクセス(ODAとも呼ぶらしい)
    1. https://odamid.oda.sas.com/ にアクセスする。
    2. User ID とパスワードでサインインする。
    3. Dashboard内のApplications中の「SAS Studio」をクリック
    4. 左側にファイル群(ナビゲーションペイン, Navigation Paneと呼ぶ)、右側にプログラム等(作業領域, Work Areaと呼ぶ)が表示される。

    [ノウハウ: Webブラウザを変えてみる] : 正確な理由が判りませんが、「SAS Studio」をクリック後に「接続中」と表示されて 先に進まない場合、ブラウザを変えると上手くいくことがあるようです。 MacでWebブラウザをGoogle ChromeからSafariに変更すると問題なかったという事例がありました。 参考までに、私はWin10上のGoogle Chromeを常用してきましたが、これまでこのような現象には遭遇していません。

  4. SASを使ってみよう
    1. 画面構成
       画面は左右の2つに分かれており、 左側にファイル群(ナビゲーションペイン, Navigation Paneと呼ぶ)、右側にプログラム等(作業領域, Work Areaと呼ぶ)が表示される。 起動直後は「プログラム1」のタグの中に3つのサブタグが表示されている。 「コード」、「ログ」、「結果」。

    2. SASプログラムの入力。
       画面の右側の「プログラム1」という名称の付いたタグに含まれる 「コード(CODE)サブタブ」にSASプログラムを入力する。 既に電子化されている場合は、プログラムをコピー&ペーストしても良い。
      【例】 コード(CODE)サブタグ: les0901.sas : プログラム
       /* Lesson 09-1 */
       /*    File Name = les0901.sas  12/07/21   */
      
      data kenshin;
        input name $ shintyou taijyuu;
      cards;
      Hara       180  86
      Yano       181  77
      Yoda       182  84
      Miura      183  88
      Sasaoka    185  90
      Takatsu    180  75
      ;
      proc print data=kenshin;
      run;
      proc means data=kenshin;
      run;
      

    3. 実行してみる。
       「コード(CODE)サブタブ」左上の「駆け足(Runをイメージか? すべてまたは選択済みコードの実行(F3))」アイコンをクリックする。

    4. 計算結果が「結果(RESULTS)」サブタグに、実行の様子が「ログ(LOG)」サブタグに、各変数の値が「出力データ(OUTPUT DATA)」サブタグに表示される。
      【例】 結果(RESULTS)サブタグ: les0901-Output.pdf : 計算結果(出力): PDFファイル
      【例】 ログ(LOG)サブタグ: les0901-Log.pdf : 作業状況(エラーの有無等): PDFファイル
                                           Friday, December 10, 2021 09:35:21 PM   3
      
                    Obs    name       shintyou    taijyuu
      
                     1     Hara          180         86  
                     2     Yano          181         77  
                     3     Yoda          182         84  
                     4     Miura         183         88  
                     5     Sasaoka       185         90  
                     6     Takatsu       180         75  
      
                                           Friday, December 10, 2021 09:35:21 PM   4
      
      The MEANS Procedure
      
      Variable    N            Mean         Std Dev         Minimum         Maximum
      -----------------------------------------------------------------------------
      shintyou    6     181.8333333       1.9407902     180.0000000     185.0000000
      taijyuu     6      83.3333333       6.0553007      75.0000000      90.0000000
      -----------------------------------------------------------------------------
      

    5. 計算結果として何が表示されているであろうか? 詳細は次節で。

    6. 各種情報を保存するために新しくディレクトリを作成する。
       画面左側(ナビゲーションペイン)の「ファイル(ホーム)」をクリック後、 直上の左端のアイコン(新規)をクリックすると、メニューが現れるので、「フォルダ」を選択する。 「新規フォルダ」のウインドウが現れるので、新しいディレクトリ名を入力する。 ここでは「StatM21」としてみる。 入力し終えたら「保存」をクリックすると、新しいフォルダが生成できたであろう。。
        [例] StatM21

    7. プログラム(CODE)を保存する: 自分の労力を無駄にしないために
       「コード(CODE)」サブタグを選択してSAS プログラムが表示されているところで、 画面左上の「フロッピーディスク」アイコンをクリックして StatM21 ディレクトリの下にSAS プログラムを保存する。 適宜ファイル名を付ける。SASプログラムの拡張子は「.sas」とする。
        [例] les0901.sas
       なお、アイコン上にマウスを移動させると「プログラムの保存(Save program)」のポップアップが表示される。 その右隣のアイコン(鉛筆マークが付加)は「名前を付けて保存(Save As)」である。

    8. 印刷したければ、プリンタのアイコン(Print のポップアップ)をクリック すれば良い。

    9. 結果(RESULTS) を保存したい場合は、 「結果(RESULTS)」サブタグを選択して、計算結果が表示されているところで、 画面左上のアイコンを一つ選択する。左から順に 「HTMLファイル形式で結果をダウンロード」、 「PDFファイル形式で結果をダウンロード(灰色)」、 「RTFファイル形式で結果をダウンロード(灰色)」、 「生成データをダウンロード(灰色)」、 「結果の印刷」である。
        [例] les0901-Results.html
        [例] les0901-Output.pdf

    10. 実行手順(ログ)を保存したい場合は、 「ログ(LOG)」サブタグを選択して、ログが表示されているところで、 画面左上のアイコンを一つ選択する。左から順に 「名前をつけてログを保存」、 「HTMLファイル形式でダウンロード」、 「ログの印刷」である。
        [例] les0901-Log.pdf

  5. プログラムの構成とその出力結果 :
    1. プログラムの読み込み :
        ログイン後、画面左側のエリア(Navigation Pane)のディレクトリ(StatM21)を指定して、目的のSAS プログラム名をクリック。もしくは、前回ログアウトした状態が画面に残ったまま。
        [例] StatM21/les0901.sas

    2. プログラム : CODEサブタグ : les0901.sas
      • はじめてのプログラム : プログラムは左側のみ。右側のコロン以降(緑色部分)は講義の説明用。
      • 3つのパート : コメント部、データの定義(data部)、緒処理の実行(proc部)
      • コメントは後々のために入れる習慣を付けよう
      • ブランク(段下げ)や空行は無視されるが見易さのために入れよう
      • 各行は(基本的に)セミコロンで終わる
      • (基本的には) proc コマンド(procedure)ごとに出力が得られる

      • [注意] データ名や変量名は 32文字以内の英数字(かつては8文字以内)で 判り易い/解り易い名前を付けること。以下の例で言えば、 データ名とは「kenshin」のことであり、 変量名とは「name, shintyou, taijyuu」のことである。
       /* Lesson 9-1 */                              : コメント、実行に無関係
       /*    File Name = les0901.sas  12/07/21   */  : 後々の記録のためのメモ
                                                     : 見易さのための空行
      data kenshin;                                  : データ名の定義
        input name $ shintyou taijyuu;               : 読み込む変量名、型($は文字型を示す)
      cards;                                         : データの始まりを示す
      Hara       180  86                             : Case 1
      Yano       181  77                             : Case 2
      Yoda       182  84                             : Case 3
      Miura      183  88                             : Case 4
      Sasaoka    185  90                             : Case 5
      Takatsu    180  75                             : Case 6
      ;                                              : データの終りを示す
      proc print data=kenshin;                       : 読み込んだデータの表示
      run;                                           : 上記の実行
      proc means data=kenshin;                       : 平均値等の算出
      run;                                           : 上記の実行
      
    3. 実行してみよう
      画面左上の「駆け足(Runをイメージか? すべてまたは選択済みコードの実行(F3))」アイコンをクリックする。

    4. 出力結果 : 結果(RESULTS)サブタグ: les0901-Output.pdf : 計算結果(出力): PDFファイル
                                           Friday, December 10, 2021 09:35:21 PM   3
      
                    Obs    name       shintyou    taijyuu
      
                     1     Hara          180         86  
                     2     Yano          181         77  
                     3     Yoda          182         84  
                     4     Miura         183         88  
                     5     Sasaoka       185         90  
                     6     Takatsu       180         75  
      
                                           Friday, December 10, 2021 09:35:21 PM   4
      
      The MEANS Procedure
      
      Variable    N            Mean         Std Dev         Minimum         Maximum
      -----------------------------------------------------------------------------
      shintyou    6     181.8333333       1.9407902     180.0000000     185.0000000
      taijyuu     6      83.3333333       6.0553007      75.0000000      90.0000000
      -----------------------------------------------------------------------------
      
    5. 計算結果 :
      1. 読み込んだデータの表示 : proc print
        • 縦方向にケース、横方向に変量
        • 左端にケース番号(Obs, Observation)
        • 入力が期待通りかを確認 : 数値のずれ、異常値、...
      2. 平均値等の算出 : proc means
        • 各変量ごとのサンプル数、平均、標準偏差、最小値、最大値
        • 小サンプル時の注意 : 各統計量に意味があるか?
      3. 有効桁数に注意せよ : どこまでが「意味ある桁」か?
        [重要な注意] 統計ソフトは単なる道具。使いこなすのは各自。

    6. デバッグ(debug)作業 : 実行時にエラーが出なければ良いのだが...
      • 結果(RESULTS)サブタグに期待した結果が表示されているのなら正常だろう。
      • エラーがあれば ログ(LOG)サブタグ(作業状況, エラーの有無等)に表示されるので、参考にしながらプログラムを修正する。
      • 綴りミスはある程度修正されるが、致命的なミスの時は実行が中断される
        1. 画面が三種類ある : コード(CODE), ログ(LOG), 結果(RESULTS)
          必要に応じて各サブタグ間を行き来する。
          1. コード(CODE)サブタグ : プログラムの作成
          2. ログ(LOG)サブタグ : 実行過程の記録(ログ)
          3. 結果(RRESULTS)サブタグ : 計算結果、出力
        2. プログラムのエラー個所を ログサブタグで確認
        3. コードサブタグに移って該当個所を修正
        4. 再実行しエラーがなくなるまで修正を繰り返す

      • エラーの例 : ログサブタグに実行結果が表示される
        1. 最後のセミコロン忘れ (一部は自動で補ってくれるが)
        2. コメントの終了ミス : /* ... */
        3. つづりミス : plint, ran, ...
        4. 変量名の順や個数、タイプ($ マークの位置)
        5. データファイルの内容が記述(or 予想)と異なる : 出力結果で確認
        6. ...

    7. 入力したものを有効活用しよう : 修正したら。完成したら。
      • プログラムの保存 : 自分のホームディレクトリに判りやすいファイル名で保存。
         コードサブタグに移動後、画面左上の「フロッピーディスク(Save program)」アイコンをクリック。 ただし、これは上書きになるので、ファイル名を変更したい場合は、 画面左上の「フロッピーディスクに鉛筆(Save as)」アイコンをクリック。
         [例] 'les0901.sas'
        • 注意 : 既に同名のファイルが存在する場合は警告が発せられる。 「Replace(上書き)」か「Cancel(中止)」の何れかを選ぶ。
      • 計算結果の保存 :
         結果サブタグに移動後、画面左上の 「HTMLファイル形式で結果をダウンロード」か「結果の印刷」をクリックする。
         [例] : les0901-Results.html
         [例] : les0901-Output.pdf

    8. [利用のまとめ] SAS を使う上での基本
      • 3つのサブタグ : それぞれに目的や使い方がある
      • エラーがあれば ログサブタグで確認する
      • 保存と読み出し : プログラムの有効利用

  6. [今後の方策] データをファイルから読み込んで使うには? 作業の流れ ===> プログラムとデータの分離
     データが大量になったら、data部(cardsの下側)に追加すれば良いのだが、限界がある。
    1. データを電子化する : Excelで ===> 第7節
    2. データファイルをSASに転送する(アップロード) ===> 第8節
    3. データをファイルから読み込むように SAS プログラムを記述する ===> 第9節
    4. 便利なコマンド ===> 第10節
    5. これらを反映させたサンプルプログラム ===> 第11節
    6. 分析結果のダウンロード ===> 次回
    7. 幾つかの統計手法用のプロシジャー ===> 次回
    8. レポートを作成するには ===> 次回

  7. データの電子化
     取り扱うデータが長方形(表形式)をしているので、表計算ソフトと呼ばれるアプリケーションを利用するのが便利である。 ここでは、Microsoft Excel を例に実際に電子化の手順を説明する。 なお、Excel のより詳しい使い方については、 市販の書籍を参考にしてほしい。
     なお、データは縦方向にケース(サンプル)が、横方向に変量が、 並んでいるとして、説明を進める。
     また、csv ファイルは Comma Separated Value の略で、 項目がカンマで区切られたテキストファイルであり、 異なったシステム間でのデータの交換に使われる。 今回はExcel の独自ファイルをcsv 形式で保存し、 それをSASに読み込ませることを考える。

    1. Excel の起動
    2. データの入力
       各自、実験データや趣味のデータを持ち寄っていただければと思っている。 もしくは、以下のようなサイトからデータをもらってくることもできる。 なお、以下の例にもあるが、欠損値はドット(ピリオド)で表現する。
    3. データの保存(その1: Excelの標準形式で(*.xls, *.xlsx)) : 今回はこちらから提供するが、本来は各自で作成してほしい。
    4. データの保存(その2: csv形式で保存(*.csv)) ===> これをSASで利用
      • [ファイル]-[名前を付けて保存]と進んで、保存先を指定後、 ウインドウの下の方にある「ファイルの種類(T)」に対して 「CSV(カンマ区切り)(*.csv))」を指定する。 「選択したファイルの種類は複数のシートを含むブックをサポートしていません」等の 警告が表示されるが、了解しているので「OK」を回答する。
      • ファイル名はANK文字(半角英数字)がベター [例] : Dragons21.csv, Prefectures20.csv
      [注意] : CSV形式の保存方法に「CSV UTF-8 (コンマ区切り) (*.csv)」があるがお薦めしない(後述)。もしくは、自分で意識して利用されたい。
    5. Excel の終了
    6. データのバックアップ

    [参考:データを見つけてくる際の参考サイトの例] :

  8. データの転送(アップロード)
     SASを起動後、Navigation Pane(画面左側)で転送したいディレクトリ([例] StatM21)を表示させ 右クリックで「ファイルのアップロード」を選択し、「ファイルの選択」に対して手元のPCのファイル( Dragons21.csv, Prefectures20.csv 等)を指定する(複数を指定することも可能)。 同様の作業はNavigation Pane上部の「上矢印アイコン」でも指定することが可能である。

    [ノウハウ: Macでの利用時の注意] : Macでは上記の「ファイルの選択」操作ができないようです。 代わりに、他のウインドウでファイル一覧を表示させ、そこから目的のファイルを Drag&Dropで「ファイルの選択」に移してやるとファイルを選択した状態になるようです。ご注意ください。
    [参考] SAS StudioでExcelデータを扱う

  9. ファイルから読み込むように SASプログラムを記述: プログラム : les1001.sas
     ファイルからデータを読み込むために、SASプログラムに手を加える。
    1. データの測定値の開始行を指定
      データの先頭に変数名の説明等が入っている場合、読み飛ばす必要がある。 以下の例では5行を読み飛ばし、8行目からがデータであることを指示している。
      [コマンド] : firstobs=8

    2. csvファイルを読み込むために
       csvファイルは項目がカンマで区切られた(Delimiter)テキストファイルであるので、 そのことを示す「dlm=','」を指定する。
       また、欠損値を含んだデータが連続した場合のcsvファイルに対しても 正常に読み込むために、「dsd missover」も追加しておく。詳しくは ここ を参照のこと。
      [コマンド] : dlm=',' dsd missover

    3. 文字コードと行末コードの指定(必要に応じて)
       Windows で作成したファイルは、文字コードがShift-JISで、 行末コードが「キャリッジリターン(CR)+改行(LF)」となっている。 しかし、SASでは文字コードのデフォルトが UTF-8、 行末コードが「キャリッジリターン(CR)」となっているので、 Windowsから転送したファイルを読み込む際にはこれらを指定する必要がある。
      [コマンド] : encoding=sjis termstr=crlf

      [参考] : テキスト・ファイルの行末コードを変更する

    4. 文字データの読み込み時に便利なコマンド
        inputコマンドにおいて、文字データ($ マークで指定)は 何も指定しない(デフォルト)と8文字しか読み込まないので、 長いデータ(以下の例の氏名等)はそのままでは後ろ側が切れてしまう。
       これに対処するために、文字列の長さを「 Name $24. 」と指定することができる(データ中最大の長さを指定する。 最後のピリオドを忘れないように)。 が、今度はデータ中の短い文字列を読んだ際に、その後ろまでもが 一つのデータであると誤認してしまい、うまく読み込めない。 このような場合は、区切り文字が出てくるまでを読み込むという指示を示す コロンを挿入して「 Name : $24. 」と指定する。
       csv ファイルを読み込む場合には頻繁に利用されるので、 覚えておくと重宝する。

  10. 今後のことを考えて3つの便利なコマンドを紹介しておく

  11. サンプルプログラムと出力: 次回に向けて

  12. 今後は...

  13. [練習問題] 上に挙げた 都道府県の人口・面積・人口密度 を参考に、データを電子化後、ファイルから読み込んで分析(平均値等)してみよ。

  14. 今週のショート課題 & アンケート: 金曜日(17日)昼までに

  15. 【参考】SAS社の無料セミナー

  16. 次回は、... : 12月21日(火) 16:20-17:50 @2311教室【対面講義】