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

統計解析 02 クラス : 第03回 (04/27/06)

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

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

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

    2. 出力結果 : Output エリア : les0201.lst
                                    SAS システム                             1
                                               22:00 Wednesday, April 19, 2006
      
                       OBS    NAME        SHINTYOU    TAIJYUU
      
                        1     Valentin       178         84  
                        2     Oh             176         85  
                        3     Itoh           181         84  
                        4     Nakamura       173         73  
                        5     Hillman        178         81  
                        6     Nomura         175         85  
      
                                    SAS システム                             2
                                               22:00 Wednesday, April 19, 2006
      
        Variable  N          Mean       Std Dev       Minimum       Maximum
        -------------------------------------------------------------------
        SHINTYOU  6   176.8333333     2.7868740   173.0000000   181.0000000
        TAIJYUU   6    82.0000000     4.6475800    73.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エリア(les0201.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 'les0301.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. データ転送(送信) : 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 3-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 3-2] : 転送されたファイルの確認
    転送したファイルが実際に存在し、ファイル内容も正しいことを確認せよ。

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

    1. 新しいプログラムを作る時にはまず現在のプログラムを消去
      Program Editorエリアのコマンド行で : [入力] clear
    2. プログラム : les0303.sas
     /* Lesson 3-3 */                               :
     /*    File Name = les0303.sas   04/27/06   */  :
                                                    :
    data naikaku;                                   : データ名の定義
      infile 'naikaku0512.prn'                      : ファイル名の指定
        firstobs=2;                                 : 数値は 2行目から入っている
      input name $ posit $ sex $ tochi              : 読み込む変量名
    ;                                               : 終りを示すセミコロン
    proc print data=naikaku;                        : データの表示
    run;                                            :
    proc means data=naikaku;                        : 平均、標準偏差、最大最小値の算出
    run;                                            :
    
    1. 出力結果、計算結果 : les0303.lst
      • 画面の移動には BACKward, FORWard, TOP, BOTtom コマンドを使う。
      • 意図通りにファイルからデータが読み込まれていることを確認せよ。
                                    SAS システム                             1
                                               20:19 Wednesday, April 26, 2006
      
                    OBS    NAME         POSIT      SEX    TOCHI
      
                      1    Koizumi     Kakuryou     M     10743
                      2    Takenaka    Kakuryou     M      3002
                      3    Sugiura     Kakuryou     M      1755
                      4    Aso         Kakuryou     M     37779
                      5    Kosaka      Kakuryou     M      5596
                      6    Kawasaki    Kakuryou     M      4978
                      7    Nikai       Kakuryou     M      7417
                      8    Kitagawa    Kakuryou     M      1231
                      9    Inagaki     Kakuryou     M      2582
                     10    Nakagawa    Kakuryou     M      2962
                     11    Koike       Kakuryou     F      1220
                     12    Abe         Kakuryou     M      9796
                     13    Kutukake    Kakuryou     M      4973
                     14    Nukaga      Kakuryou     M      5272
                     15    Yosano      Kakuryou     M      6828
      <中略>
                       55    Kaneko      Seimu     M       940
                       56    Kosehira    Seimu     M      1378
                       57    Katayama    Seimu     F      2082
                       58    Kobayash    Seimu     M         0
                       59    Gotou       Seimu     M      6821
                       60    Yosida      Seimu     M      3395
      
                                    SAS システム                             5
                                               20:19 Wednesday, April 26, 2006
             Analysis Variable : TOCHI
      
              N          Mean       Std Dev       Minimum       Maximum
             ----------------------------------------------------------
             60       4053.98       5987.72             0      37779.00
             ----------------------------------------------------------
      
    2. プログラムの保存 :
      Program Editorエリアのコマンド行でプログラムを recall 後 : [入力] file 'les0304.sas'

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

    1. 今までのプログラムを活用 : les0304.sas
     /* Lesson 3-4 */                                      
     /*    File Name = les0304.sas   04/27/06   */
                                                           
    data naikaku;                                          
      infile 'naikaku0512.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. 出力結果 : les0304.lst : 以下掲載分には一部省略あり
                                    SAS システム                             5
                                               20:19 Wednesday, April 26, 2006
             Analysis Variable : TOTAL
      
              N          Mean       Std Dev       Minimum       Maximum
             ----------------------------------------------------------
             60       6537.67       7631.23             0      45629.00
             ----------------------------------------------------------
      
                                    SAS システム                             6
                                               20:19 Wednesday, April 26, 2006
           TOTAL                                   Cum.              Cum.
          Midpoint                           Freq  Freq  Percent  Percent
                   |
            4000   |***********************    45    45    75.00    75.00
           12000   |******                     11    56    18.33    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
                           Frequency
      
                                    SAS システム                             7
                                               20:19 Wednesday, April 26, 2006
       Frequency
          |     *****                                                         
       40 +     *****                                                         
          |     *****                                                         
       30 +     *****                                                         
          |     *****                                                         
       20 +     *****                                                         
          |     *****                                                         
       10 +     *****     *****                                               
          |     *****     *****                                               
          ------------------------------------------------------------------
                 4000     12000     20000     28000     36000     44000
                                    TOTAL Midpoint
      
    3. 出力からの知見 :
      • 入力した全変量が正しく読み込まれているか?
      • 氏名は切れずに読み込まれているか?
      • ヒストグラム(度数分布)からデータの分布状況を判断する
      • 平均値はヒストグラムのどこに位置するか?
      • 累積頻度や累積割合が表示されるのは横棒グラフだけ
      • ...

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

  8. 再度改良

    1. 今までのプログラムに追加 : les0305.sas
     /* Lesson 3-5 */
     /*    File Name = les0305.sas   04/27/06   */
    
    data naikaku;
      infile 'naikaku0512.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. 出力結果 : les0305.lst : 以下掲載分には一部省略あり
                                    SAS システム                             1
                                               20:19 Wednesday, April 26, 2006
      
       OBS NAME      POSIT   SEX TOCHI YOTYOKIN TOTAL HONNIN KASITUKE KARIIRE
      
         1 Koizumi  Kakuryou  M  10743   2360   13103  13103       0       0 
         2 Takenaka Kakuryou  M   3002   1071    4073   1213    6065    1681 
         3 Sugiura  Kakuryou  M   1755    796    2551   2071       0       0 
         4 Aso      Kakuryou  M  37779   7850   45629  40379   20100    2000 
         5 Kosaka   Kakuryou  M   5596   1300    6896   5224       0       0 
      
                                    SAS システム                             2
                                               20:19 Wednesday, April 26, 2006
             Analysis Variable : TOTAL
      
              N          Mean       Std Dev       Minimum       Maximum
             ----------------------------------------------------------
             60       6537.67       7631.23             0      45629.00
             ----------------------------------------------------------
      <中略>
                                    SAS システム                             5
                                               20:19 Wednesday, April 26, 2006
           TOTAL                                   Cum.              Cum.
          Midpoint                           Freq  Freq  Percent  Percent
                   |
            5000   |***********************    45    45    75.00    75.00
           10000   |****                        8    53    13.33    88.33
           15000   |**                          4    57     6.67    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
      
                                    SAS システム                             6
                                               20:19 Wednesday, April 26, 2006
      Frequency
         |       *****                                                        
      45 +       *****                                                        
         |       *****                                                        
      30 +       *****                                                        
         |       *****                                                        
      15 +       *****                                                        
         |       *****                                                        
         --------------------------------------------------------------------
                 10000       20000       30000       40000       50000
                                    TOTAL Midpoint
      
    3. 出力からの知見 :
      • 入力した全変量が正しく読み込まれているかを先頭 5ケースで確認
      • ヒストグラムの区切り幅を換えると分布のイメージが変化する
      • 平均値はヒストグラムのどこに位置するか?
      • 平均値が分布形状を想像するに足る情報であろうか?
        • 対称分布の場合だけ
        • それでも広がりは判らない
      • ...

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

  9. 出力結果の保存 : Outputエリアの内容をファイルに保存
    解析結果を活用するため : 印刷、レポート、...
    1. プログラムを実行(SUBmit)する前に、
      Outputエリアの過去の記録を消去しておく: [入力] clear
      こ の処理をしておかないと、過去の全ての(不要な、多大な)記録が全部保存される
    2. 出力結果の保存 :
      Outputエリアのコマンド行で : [入力] file 'les0305.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 les0305.lst > les0305s.lst

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

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

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

  11. 次回は、... : 05月11日 14:45
    • 今回終えられなかった部分
    • 基礎統計量
    • 興味あるデータの特性を明らかにしていこう
      • 不断に興味のあるデータを電子化して持参せよ。
      • 皆さんのデータを使った解析 : 各自のデータを解析してみよう
      • ファイル名は各自で命名し、記録しておくように

    • ゴールデンウィーク中にやっておくべき事項
      • 第2次小泉内閣の閣僚資産データの電子化完了
      • 興味のあるデータを見つけて、電子化
      • 電子化したデータを stat システムに転送しておくこと
[DIR]講義のホームページへ戻ります