プログラムの解説、デバッグ、データ転送、ファイルからの読み込み

統計解析 06 クラス : 第05回 (11/10/05)

 前回は SAS を使うための操作方法やコマンドを中心に説明を行った。 今回は、SAS のプログラムについて構成を解説すると共に、 データをファイルから読み込んで実行する方法を、 プログラムの修正方法を含めて紹介する。
  1. プログラムの構成とその出力結果 : 前回 の演習内容
    1. プログラムの読み込み :
      Program Editorエリアのコマンド行で : [入力] INClude 'les0401.sas'

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

      • [注意] データ名や変量名は8文字以内で (判りやすい)名前を付けること。以下の例で言えば、データ名は「kenshin」であり、 変量名は「name, shintyou, taijyuu」のことである。
     /* Lesson 4-1 */                             : コメント、実行に無関係
     /*    File Name = les0401.sas  10/27/05   */ : 後々の記録のためのメモ
                                                  : 見易さのための空行
    data kenshin;                                 : データ名の定義
      input name $ shintyou taijyuu;              : 読み込む変量名、型($は文字型を示す)
    cards;                                        : データの始まりを示す
      Valentine   178  84                         : Case 1
      Oh          176  85                         : Case 2
      Itoh        181  84                         : Case 3
      Ohgi        171  71                         : Case 4
      Hillman     178  81                         : Case 5
      Tao         174  77                         : Case 6
    ;                                             : データの終りを示す
    proc print data=kenshin;                      : 読み込んだデータの表示
    run;                                          : 上記の実行
    proc means data=kenshin;                      : 平均値等の算出
    run;                                          : 上記の実行
    
    1. 実行してみよう
      Program Editor エリアの「コマンド =>」の右にカーソルを移動させて「SUB」

    2. 出力結果 : Output エリア : les0401.lst
                                    SAS システム                             1
                                             11:48 Wednesday, November 9, 2005
       
                       OBS    NAME        SHINTYOU    TAIJYUU
       
                        1     Valentin       178         84
                        2     Oh             176         85
                        3     Itoh           181         84
                        4     Ohgi           171         71
                        5     Hillman        178         81
                        6     Tao            174         77
       
                                    SAS システム                             2
                                             16:35 Wednesday, October 26, 2005
       
        Variable  N          Mean       Std Dev       Minimum       Maximum
        -------------------------------------------------------------------
        SHINTYOU  6   176.3333333     3.5023801   171.0000000   181.0000000
        TAIJYUU   6    80.3333333     5.4283208    71.0000000    85.0000000
        -------------------------------------------------------------------
      
    3. 計算結果 :
      1. 読み込んだデータの表示 : proc print
        • 縦方向にケース、横方向に変量
        • 左端にケース番号(Observation)
        • 入力が期待通りかを確認 : 数値のずれ、異常値、...
      2. 平均値等の算出 : proc means
        • 各変量ごとのサンプル数、平均、標準偏差、最小値、最大値
        • 小サンプル時の注意 : 各統計量に意味があるか?
      3. 有効桁数に注意せよ : どこまでが「意味ある桁」か?
        [重要な注意] 統計ソフトは単なる道具。使いこなすのは各自。
        [例1] 日本の観測史上の 最高気温は、1933(昭和8)年7月25日に山形市で観測された40.8度であり、 最低気温は、1902(明治35)年1月25日に北海道旭川市の-41度であった。===> -41.0度
        [例2] 2001年のイチロー選手の打率は3割5分であった。===> 3割5分0厘
        [例3] 大学入試センター : 志願者数 57万人、受験者数 52.5万人 (平成17年度)

    4. デバッグ : 実行時にエラーが出なければ良いのだが...
      • Outputエリアに期待した結果が表示されているのなら正常だろう
      • エラーがあれば Logエリア(les0401.log)に表示される
      • 綴りミスはある程度修正されるが、致命的なミスの時は実行が中断される
        1. 画面が三種類ある : Program Editor, Log, Output
          必要に応じて各エリアを行き来する。コマンド行で。
          1. Program Editorエリアへ : PGM : プログラムの作成
          2. Logエリアへ : LOG : 実行過程の記録(ログ)
          3. Outputエリアへ : OUTput : 計算結果、出力
        2. プログラムのエラー個所を Logエリアで確認
        3. Program Editorエリアに移って該当個所を修正
        4. 再実行しエラーがなくなるまで修正を繰り返す
      • エラーの例 : Logエリアに実行結果が表示される
        1. セミコロン忘れ
        2. コメントの終了ミス : /* ... */
        3. つづりミス : plint, ran, ...
        4. 変量名の順や個数、タイプ($ マークの位置)
        5. データファイルの内容が記述(or 予想)と異なる : 出力で確認
        6. マウスを使ったことによるノイズの混入
        7. ...

    5. 入力したものを有効活用しよう : 修正したら。完成したら。
      • 保存 : 自分のホームディレクトリに判りやすいファイル名で保存。
         Program Editor エリアのコマンド行で。
         [例] file 'les0501.sas'
      • 注意 : 既に同名のファイルがあったら、警告が発せられる。
        「上書き(REPLACE)」、「追加(APPEND)」、「中止(CANCEL)」の中から一つを選ぶ。

    6. SAS を使う上での基本
      • マウスは使えない : stat システム上に SAS がある
      • 3つのエリア : それぞれに目的や使い方がある
      • エラーがあれば Log エリアで確認する
      • 保存と読み出し : プログラムの有効利用

  2. データをファイルから読み込んで使うには... : プログラムとデータの分離
    1. データを電子化する : Excel 等で ===> 前回 第7節
    2. ファイルを stat システムに転送する : WinSCP 等で ===> 第4節
    3. 転送が期待通り行なわれたかを確認する ===> 第5節
    4. データをファイルから読み込むように SAS プログラムを記述する ===> 第6節
    5. SAS プログラムを改良する ===> 第7節、第8節
    6. レポートを作成するには ===> 第9節、第10節

  3. データの電子化 : 詳細は前回の配布資料 第7節を参照
    取り扱うデータが長方形(表形式)をしているので、表計算ソフトと呼ばれるアプリケーションを利用するのが便利である。 ここでは、Microsoft Excel を例に実際に電子化の手順を説明する。 なお、Excel のより詳しい使い方については、 「PC・ネットワーク利用ガイド」や市販の書籍を参考にしてほしい。
    また、データは縦方向にケース(サンプル)が、横方向に変量が、 並んでいるとして、説明を進める。
    1. Excel の起動
    2. データの入力
    3. データの保存(その1: Excel の標準形式で) :
    4. 項目の右揃え
    5. データの保存(その2: テキスト形式で) :
    6. Excel の終了
    7. データのバックアップ


    [説明が不十分であったので第4節を全面的に改訂した]

  4. データ転送(送信) : WinSCP を使ったファイルの送受信
    MNC では、ファイルの送受信ツールとして WinSCP を用意しているので、このソフトウェアの使い方を説明する。 なお、これはフリーソフトウェアであるので、自宅から使うような場合は 各自のパソコンにインストールしておくとよいであろう。

    1. 転送プログラム(WinSCP)の起動
      「スタート」→「プログラム(P)」→「stat システム」→ 「WinSCP」→選択欄のstat11(または stat12)をダブルクリックする。
    2. ユーザ名欄にユーザID、パスワード欄にパスワードを入力する。
    3. 「ログイン」をクリックする。
    4. 画面の左半分は Windows 側を、 右半分は stat システム側のファイルを表示している。
    5. 転送したいファイルを画面から選び反対側のドライブに ドラッグ & ドロップする。
      • 送信(アップロード) : Windows から stat システムへコピー
      • 受信(ダウンロード) : stat システムから Winodws へコピー
    6. 「コピー」と言うウインドウが開く。右下の「コピー」ボタンを押すと、 コピーされるのだが、これが曲者であり、 そのまま「コピー」ボタンを押すのは避けた方が良い。
    7. 中央下の「詳細(M)>>」ボタンを押して、 転送モードを細かく指定する画面を表示する。
    8. 「転送モード」が「自動」になっていると思うが、 転送モードはこちらから陽に指定する。 「解析用データ(*.prn)」や「SAS の出力(*.lst)」はテキスト形式と言って、 文字だけで構成されており、これらは「転送モード」に「テキスト」を 指定してやらないといけない。一方、「Excel ファイル(*.xls)」や 「圧縮されたファイル(*.exe, *.lha, *.zip 等)」は内部コードで記述されているので 「転送モード」に「バイナリ」を指定してやらないといけない。
      • テキストモード : 解析用データ(*.prn), SAS の出力(*.lst)等
      • バイナリモード : Excel ファイル(*.xls)等
    9. 転送モードを指定後、「コピー」ボタンを押して転送する。

    10. 終了は「セッション(Session)」→「切断(Disconnect)」をクリックし、 「閉じる」をクリックする。

     ・参考になるWebページ

    [Lesson 5-1] : ファイルの転送: Windows ===> stat システム(UNIX)

    [参考] PC・ネットワーク利用ガイド2005年度版 の「 第6章 その他のサービス 」に stat システムを使う際の説明が若干載っている。


  5. 転送されたデータの表示 : 確認のため。簡単な UNIX コマンド
    1. stat システムにログイン
      「スタート」→「プログラム(P)」→「stat システム」→「PuTTY」→「stat11」とクリックする。
    2. 「login as:」、「password:」と表示されるので、 それぞれ個人のIDとパスワードを入力する。 なお、パスワードはセキュリティの都合上、画面には表示されない。
    3. UNIX の初歩的なコマンド
      • ファイル名一覧の表示 : ls
      • ファイルの内容の表示 : less [filename]
        [操作方法] スペースキーで次ページ、b で前ページ、q で終了
      • ( ファイルの漢字コード変換 : nkf -s [in_filename] > [out_filename] )
      • ログアウト : logout

      • ( コマンドラインの入力支援 : tcsh )
        • exit で終了
        • ログイン後、最初に1回だけ実行しておくと exit を実行するまで利用できる。

    [Lesson 5-2] : 転送されたファイルの確認
    転送したファイルが実際に存在し、ファイル内容も正しいことを確認せよ。

  6. データをファイルから読み込む : プログラムとデータの分離
    データが追加されたり、別クラスのデータを解析したくなったら??
    : データをファイルから読み込んで処理しよう
    : 大量データや定型的な処理に有効
    [Lesson 5-3] : 前項で作成したデータをファイルから読み込んで変量の平均値を求めてみよう。 なお、ファイル名は各自で命名したものを指定せよ。 ここでは「naikaku0310.prn」という名前で説明する。

    1. 新しいプログラムを作る時にはまず現在のプログラムを消去
      Program Editorエリアのコマンド行で : [入力] clear
    2. プログラム : les0503.sas
     /* Lesson 5-3 */                               :
     /*    File Name = les0503.sas   11/10/05   */  :
                                                    :
    data naikaku;                                   : データ名の定義
      infile 'naikaku0310.prn'                      : ファイル名の指定
        firstobs=2;                                 : 数値は 2行目から入っている
      input name $ posit $ sex $ tochi              : 読み込む変量名
    ;                                               : 終りを示すセミコロン
    proc print data=naikaku;                        : データの表示
    run;                                            :
    proc means data=naikaku;                        : 平均、標準偏差、最大最小値の算出
    run;                                            :
    
    1. 出力結果、計算結果 : les0503.lst
      • 画面の移動には BACKward, FORWard, TOP, BOTtom コマンドを使う。
      • 意図通りにファイルからデータが読み込まれていることを確認せよ。
                                    SAS システム                             1
                                             11:48 Wednesday, November 9, 2005
      
                    OBS    NAME         POSIT      SEX    TOCHI
      
                      1    Koizumi     Kakuryou     M     10743
                      2    Aso         Kakuryou     M     37772
                      3    Nozawa      Kakuryou     M      2315
                      4    Kawaguch    Kakuryou     F      2266
                      5    Kawamura    Kakuryou     M      6268
                      6    Sakaguch    Kakuryou     M       451
                      7    Nakagawa    Kakuryou     M      2915
                      8    Ishihara    Kakuryou     M      2346
                      9    Koike       Kakuryou     F      1393
                     10    Fukuda      Kakuryou     M      6036
                     11    Ono         Kakuryou     F      2005
                     12    Mogi        Kakuryou     M       688
                     13    Takenaka    Kakuryou     M      3122
                     14    Kaneko      Kakuryou     M      2859
                     15    Inoue       Kakuryou     M      5464
      <中略>
                       55    Fukumoto    Seimu     M      1114
                       56    Eda         Seimu     M      1591
                       57    Kan         Seimu     M      3401
                       58    Satou       Seimu     M       667
                       59    Saitou      Seimu     M      3213
                       60    Sunada      Seimu     M      5433
      
                                    SAS システム                             5
                                             11:48 Wednesday, November 9, 2005
             Analysis Variable : TOCHI
      
              N          Mean       Std Dev       Minimum       Maximum
             ----------------------------------------------------------
             60       4077.17       6398.74             0      37772.00
             ----------------------------------------------------------
      
    2. プログラムの保存 :
      Program Editorエリアのコマンド行でプログラムを recall 後 : [入力] file 'les0504.sas'

  7. プログラムの改良 : 入力済みのものを有効利用 : コピー、挿入、削除、...

    1. 今までのプログラムを活用 : les0504.sas
     /* Lesson 5-4 */                                      
     /*    File Name = les0504.sas   11/10/05   */
                                                           
    data naikaku;                                          
      infile 'naikaku0310.prn'
        firstobs=2;
      input name $10. posit $ sex $ tochi            : 文字列長の指定方法
            yotyokin total honnin kasituke kariire   : 長い場合は 2行に
    ;
    proc print data=naikaku;
    run;
    proc means data=naikaku;
      var total;                                     : 平均を求める変量を指定
    run;
    
    proc chart data=naikaku;                         : ヒストグラムを描く
      hbar total;                                    : 水平棒グラフで。変量を指定
      vbar total;                                    : 垂直棒グラフで。変量を指定
    run;
    
    1. 編集コマンド : 行コマンド (MNCセミナー用テキスト)、 前回の配布資料参照
      • [Ctrl]+[X] : インサートモード
      • i : 行挿入

      • cc : 領域コピー(コピーしたいところを囲む)
      • b : 当該行の前(before)に挿入
      • c : 一行コピー

      • a : 当該行の後ろ(after)に挿入
      • d : 一行削除
      • dd : 領域削除

    2. 出力結果 : les0504.lst : 以下掲載分には一部省略あり
      
                                    SAS システム                             5
                                             11:48 Wednesday, November 9, 2005
             Analysis Variable : TOTAL
      
              N          Mean       Std Dev       Minimum       Maximum
             ----------------------------------------------------------
             60       5761.28       7444.75             0      45522.00
             ----------------------------------------------------------
      
                                    SAS システム                             6
                                             11:48 Wednesday, November 9, 2005
         TOTAL                                       Cum.              Cum.
        Midpoint                               Freq  Freq  Percent  Percent
                 |
          4000   |***************************    53    53    88.33    88.33
         12000   |**                              3    56     5.00    93.33
         20000   |*                               1    57     1.67    95.00
         28000   |*                               2    59     3.33    98.33
         36000   |                                0    59     0.00    98.33
         44000   |*                               1    60     1.67   100.00
                 |
                 -----+----+----+----+----+--
                      10   20   30   40   50
                           Frequency
      
                                    SAS システム                             7
                                             11:48 Wednesday, November 9, 2005
       Frequency
          |     *****                                                         
       50 +     *****                                                         
          |     *****                                                         
       40 +     *****                                                         
          |     *****                                                         
       30 +     *****                                                         
          |     *****                                                         
       20 +     *****                                                         
          |     *****                                                         
       10 +     *****                                                         
          |     *****     *****                                               
          ------------------------------------------------------------------
                 4000     12000     20000     28000     36000     44000
                                    TOTAL Midpoint
      
    3. 出力からの知見 :
      • 入力した全変量が正しく読み込まれているか?
      • 氏名は切れずに読み込まれているか?
      • ヒストグラム(度数分布)からデータの分布状況を判断する
      • 平均値はヒストグラムのどこに位置するか?
      • 累積頻度や累積割合が表示されるのは横棒グラフだけ
      • ...

    4. プログラムの保存 :
      Program Editorエリアのコマンド行でプログラムを recall 後 : [入力] file 'les0505.sas'

  8. 再度改良

    1. 今までのプログラムに追加 : les0505.sas
     /* Lesson 5-5 */
     /*    File Name = les0505.sas   11/10/05   */
    
    data naikaku;
      infile 'naikaku0310.prn'
        firstobs=2;
      input name $10. posit $ sex $ tochi 
            yotyokin total honnin kasituke kariire
    ;
    proc print data=naikaku(obs=5);              : 先頭の 5ケースだけを表示。確認用
    run;
    proc means data=naikaku;
      var total;
    run;
    
    proc chart data=naikaku;
      hbar total;
      vbar total;
    run;
    
    proc chart data=naikaku;
      hbar total / midpoints= 5000 to 50000 by  5000;        : 軸の値を指定
      vbar total / midpoints=10000 to 50000 by 10000;        : 軸の値を指定
    run;
    
    1. 編集コマンドを駆使せよ

    2. 出力結果 : les0505.lst : 以下掲載分には一部省略あり
                                    SAS システム                             1
                                             11:48 Wednesday, November 9, 2005
      OBS NAME       POSIT   SEX TOCHI YOTYOKIN TOTAL HONNIN KASITUKE KARIIRE
      
        1 Koizumi   Kakuryou  M  10743    2360  13103  13103       0       0 
        2 Aso       Kakuryou  M  37772    7750  45522  40273   20100    2000 
        3 Nozawa    Kakuryou  M   2315    2114   4429   2912       0       0 
        4 Kawaguchi Kakuryou  F   2266   14330  16596  11344       0       0 
        5 Kawamura  Kakuryou  M   6268    2228   8496   5872       0    1000 
      
                                    SAS システム                             2
                                             11:48 Wednesday, November 9, 2005
             Analysis Variable : TOTAL
      
              N          Mean       Std Dev       Minimum       Maximum
             ----------------------------------------------------------
             60       5761.28       7444.75             0      45522.00
             ----------------------------------------------------------
      <中略>
                                    SAS システム                             5
                                             11:48 Wednesday, November 9, 2005
          TOTAL                                     Cum.              Cum.
         Midpoint                             Freq  Freq  Percent  Percent
                  |
           5000   |*************************    49    49    81.67    81.67
          10000   |***                           6    55    10.00    91.67
          15000   |*                             2    57     3.33    95.00
          20000   |                              0    57     0.00    95.00
          25000   |*                             1    58     1.67    96.67
          30000   |*                             1    59     1.67    98.33
          35000   |                              0    59     0.00    98.33
          40000   |                              0    59     0.00    98.33
          45000   |*                             1    60     1.67   100.00
          50000   |                              0    60     0.00   100.00
                  |
                  -----+----+----+----+----+
                       10   20   30   40   50
      
                                    SAS システム                             6
                                             11:48 Wednesday, November 9, 2005
      Frequency
         |       *****                                                        
      45 +       *****                                                        
         |       *****                                                        
      30 +       *****                                                        
         |       *****                                                        
      15 +       *****                                                        
         |       *****                                                        
         --------------------------------------------------------------------
                 10000       20000       30000       40000       50000
                                    TOTAL Midpoint
      
    3. 出力からの知見 :
      • 入力した全変量が正しく読み込まれているかを先頭 5ケースで確認
      • ヒストグラムの区切り幅を換えると分布のイメージが変化する
      • 平均値はヒストグラムのどこに位置するか?
      • 平均値が分布形状を想像するに足る情報であろうか?
        • 対称分布の場合だけ
        • それでも広がりは判らない
      • ...

    4. プログラムの保存 :
      Program Editorエリアのコマンド行でプログラムを recall 後 : [入力] file 'les0506.sas'

  9. 出力結果の保存 : Outputエリアの内容をファイルに保存
    解析結果を活用するため : 印刷、レポート、...
    1. プログラムを実行(SUBmit)する前に、
      Outputエリアの過去の記録を消去しておく: [入力] clear
      こ の処理をしておかないと、過去の全ての(不要な、多大な)記録が全部保存される
    2. 出力結果の保存 :
      Outputエリアのコマンド行で : [入力] file 'les0505.lst'
      プログラムの保存と同じコマンドだが、保存対象が異なる
    3. 各種エリアの保存や呼び出しについては、以後、いちいち指示しない。 各自で判断してほしい。

  10. 漢字コード変換 : 計算結果には日本語が含まれている
    漢字の表現方法(漢字コード)には幾つかの体系があって、異なったコード体系間では 変換を行わないと正常には読み出せない。
    Windows マシンで利用される漢字コードは、 「Shift-JISコード」に固定されているため、この様な混乱は少ない。 しかし、stat システムを含む UNIX マシンの場合は、 「EUC コード」や「JIS コード」が使われることが多く、 Windows マシンとデータを共有しようとすると、 漢字コードの変換を頭に入れて、適宜変換しながら利用する必要がある。
    • Windows マシン : Shift-JIS コード
    • UNIX マシン : EUC コード, JIS コード

    stat システム上の SAS に関して言えば、SAS の出力中の日本語は 「EUC コード」を使って表現されているので、 SAS の「計算結果」を Windows マシンに転送する前に 「EUC コード」を「Shift-JIS コード」に変換する必要が生じる。 また、漢字を含む元データを stat システム上で解析したいのなら、 転送後、stat システム上で EUC コードに変換してから利用する必要がある。
    同様の理由で、ファイル名に漢字を使うのも避けるべきである。

    1. SAS の計算結果には日本語が含まれているので、Windows 側に転送する前に 「EUC コード」を「Shift-JIS コード」に変換する必要がある。
    2. 漢字コード変換ツール「nkf」の利用 : 「-s」オプションは Shift-JIS コードに変換指せることの指定。 変換後のファイル名を大なり記号(>)の右側に書く。
      [実行例]
      nkf -s les0505.lst > les0505s.lst

    3. WinSCP を使って Windows 側に変換後のファイルを転送して、レポート作成に利用。

    [Lesson 5-5] : Windows 側で読み出せるか、実際に転送してみよ。

    • 転送前に nkf コマンドを使って漢字コードを変換しておく。
    • WinSCP を使って、変換後のファイルを Windows に転送。
    • 印刷するだけなら、「H:」ドライブ辺りに転送して メモ帳や MS-Word (や秀丸等のエディタ等)に読みこんで印刷。 ファイル名の拡張子(.sas、.lst等)に注意しないと見つけられない。
    • 印刷の仕方等については、「PC・ネットワーク利用ガイド」を参照のこと。
    • 手元に保存しておきたいのなら、FD や MO 等にバックアップを取る。

  11. 次回は、... : 11月17日 13:10
    • 今回終えられなかった部分
    • 基礎統計量
    • 興味あるデータの特性を明らかにしていこう
      • 不断に興味のあるデータを電子化して持参せよ。
      • 皆さんのデータを使った解析 : 各自のデータを解析してみよう
      • ファイル名は各自で命名し、記録しておくように
[DIR]講義のホームページへ戻ります