プログラムの構成と編集

統計処理 01 クラス : 第4回(05/09/01)

前回は SAS を使うための操作方法やコマンドを中心に説明を行った。 今回は、SAS のプログラムについて構成を解説すると共に、 修正方法についても説明する。
  1. プログラムとその出力結果 : 前回の演習内容
    1. プログラム : Programエリア : les0301.sas
      • はじめてのプログラム : 右側は説明用。プログラムは左側のみ。
      • 3つのパート : コメント部、データの定義(data部)、緒処理の実行(proc部)
      • コメントは後々のために入れる習慣を付けよう
      • ブランクは無視されるが見易さのために入れよう(段下げ)
      • 各行は(基本的に)セミコロンで終わる
      • (基本的には) proc コマンド(procedure)ごとに出力が得られる

      • [注意] データ名や変量名は8文字以内で (判りやすい)名前を付けること。以下の例で言えば、データ名は「kenshin」であり、 変量名は「name, height, weight」のことである。
       /* Lesson 3-1 */                             : コメント、実行には無関係
       /*    File Name = les0301.sas  04/25/02   */ : 後々の記録のためのメモ
                                                    : 見易さのための空行
      data kenshin;                                 : データ名の定義
        input name $ height weight;                 : 読み込む変量名、型($は文字型を示す)
      cards;                                        : データの始まりを示す
        Koizumi     156  44                         : Case 1
        Mori        165  58                         :      2
        Obuchi      157  43                         :      3
        Hasimoto    159  44                         :      4
        Murayama    162  44                         :      5
        Hada        159  59                         :      6
      ;                                             : データの終りを示す
      proc print data=kenshin;                      : 読み込んだデータの表示
      run;                                          : 上記の実行
      proc means data=kenshin;                      : 平均値等の算出
      run;                                          : 上記の実行
      

    2. 出力、計算結果 : Outputエリア : les0301.lst
      1. 読み込んだデータの表示 : proc print
        • 縦方向にケース、横方向に変量
        • 左端にケース番号(Observation)
        • 入力が期待通りかを確認 : 数値のずれ、異常値、...
      2. 平均値等の算出 : proc means
        • 各変量ごとのサンプル数、平均、標準偏差、最小値、最大値
        • 小サンプル時の注意
      3. 有効数字に注意せよ : どこまでが「意味ある桁」か?
        [蛇足的例1] 日本の観測史上の 最高気温は、1933(昭和8)年7月25日に山形市で観測された40.8度であり、 最低気温は、1902(明治35)年1月25日に北海道旭川市の-41度である。
        [蛇足的例2] 2001年のイチロー選手の打率は3割5分であった。
                                    SAS システム                             1
                                               18:27 Wednesday, April 24, 2002
      
                        OBS    NAME        HEIGHT    WEIGHT
      
                         1     Koizumi       156       44  
                         2     Mori          165       58  
                         3     Obuchi        157       43  
                         4     Hasimoto      159       44  
                         5     Murayama      162       44  
                         6     Hada          159       59  
      
      
                                    SAS システム                             2
                                               18:27 Wednesday, April 24, 2002
      
        Variable  N          Mean       Std Dev       Minimum       Maximum
        -------------------------------------------------------------------
        HEIGHT    6   159.6666667     3.3266600   156.0000000   165.0000000
        WEIGHT    6    48.6666667     7.6332606    43.0000000    59.0000000
        -------------------------------------------------------------------
      
    3. 実行時にエラーが出なければ良いのだが... : デバッグ
      • Outputエリアに期待した結果が表示されているのなら正常だろう
      • エラーがあれば Logエリア(les0301.log)に表示される
      • 綴りミスはある程度修正されるが、致命的なミスの時は実行が中断される
        1. 画面が三種類ある : Program, Log, Output
          必要に応じて各エリアを行き来する。コマンド行で。
          1. Programエリアへ : PGM : プログラムの作成
          2. Logエリアへ : LOG : 実行過程の記録(ログ)
          3. Outputエリアへ : OUTput : 計算結果、出力
        2. プログラムのエラー個所を Logエリアで確認
        3. Programエリアに移って該当個所を修正
        4. 再実行しエラーがなくなるまで修正を繰り返す
      • エラーの例 : Logエリアに実行結果が表示される
        1. セミコロン忘れ
        2. コメントの終了ミス : /* ... */
        3. つづりミス : plint, ran, ...
        4. 変量名の順や個数、タイプ($ マークの位置)
        5. データファイルの内容が記述(or 予想)と異なる : 出力で確認
        6. ...

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

    1. 新しいプログラムを作る時にはまず現在のプログラムを消去
      Programエリアのコマンド行で : [入力] clear
    2. プログラム : les0302.sas
       /* Lesson 3-2 */                               :
       /*    File Name = les0302.sas   04/25/02   */  :
                                                      :
      data gakusei;                                   :
        infile 'les0201.prn';                         : データ名の定義
        input sex $ shintyou taijyuu kyoui            : 長い場合は 2行に
              jitaku $ kodukai carrier $ tsuuwa;      : 最後はセミコロン
                                                      : ファイル名の指定
      proc print data=gakusei(obs=5);                 : データの表示(先頭5ケース)
      run;                                            :
      proc means data=gakusei;                        : 平均、標準偏差、最大最小値の算出
      run;                                            :
      
    3. 出力結果 : les0302.lst
                                    SAS システム                             1
                                               12:11 Wednesday, April 24, 2002
      
        OBS  SEX  SHINTYOU  TAIJYUU  KYOUI  JITAKU  KODUKAI  CARRIER  TSUUWA
      
          1   M      168      74.0      .     G      120000    DDI     15000
          2   F      158      45.5      .     J           .    DoC     10000
          3   F      156      42.0     85     J           0    DoC     15000
          4   M      165      55.0      .     J        4000    No          .
          5   F      156      42.0      .     J       35000             7000
      
                                    SAS システム                             2
                                               12:11 Wednesday, April 24, 2002
      
        Variable   N          Mean       Std Dev       Minimum       Maximum
        --------------------------------------------------------------------
        SHINTYOU  10   164.8500000     7.8317374   156.0000000   181.5000000
        TAIJYUU   10    54.4400000    12.0477015    42.0000000    74.5000000
        KYOUI      3    78.6666667     5.5075705    75.0000000    85.0000000
        KODUKAI    9      39666.67      47082.37             0     120000.00
        TSUUWA     8      12250.00       8207.14       3000.00      30000.00
        --------------------------------------------------------------------
      
    4. プログラムの保存 :
      Programエリアのコマンド行で : [入力] file 'les0302.sas'

  3. 入力済みのプログラムの有効利用 : コピー、挿入、削除、...
    1. 今までのプログラムに追加 : プログラム : les0402.sas
      Lesson 4-2 : データを視覚的に捉える: ヒストグラム、散布図
       /* Lesson 4-2 */                                      
       /*    File Name = les0402.sas   05/09/01   */         
                                                             
      data gakusei;                                          
        infile 'les0201.prn';                                
        input sex $ shintyou taijyuu kyoui 
              jitaku $ kodukai carrier $ tsuuwa;
                                                             
      proc print data=gakusei(obs=5);
      run;                           
      proc means data=gakusei;       
      run;                           
      proc chart data=gakusei;                     : ヒストグラムを描く
        hbar shintyou taijyuu;                     : 水平棒グラフで。変量を指定
        vbar shintyou taijyuu;                     : 垂直棒グラフで。変量を指定
      run;                                         :
      proc plot data=gakusei;                      : 散布図を描く
        plot shintyou*taijyuu;                     : 散布図の変量を指定(縦軸、横軸の順)
        plot taijyuu*shintyou;                     :
      run;                                         :
      
    2. 編集コマンド : 入力済みプログラムの有効利用 : 行コマンド (MNCセミナー用テキスト)
      • cc : 領域コピー
      • b : 当該行の前(before)に挿入
      • i : 行挿入
      • c : 一行コピー

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

    3. 出力結果 : les0402.lst : 以下掲載分には一部省略あり
      
                                    SAS システム                             3
                                                  16:45 Wednesday, May 8, 2002
      
      SHINTYOU                                          Cum.              Cum.
      Midpoint                                    Freq  Freq  Percent  Percent
                 |
           156   |******************************     3     3    30.00    30.00
                 |
           164   |******************************     3     6    30.00    60.00
                 |
           172   |******************************     3     9    30.00    90.00
                 |
           180   |**********                         1    10    10.00   100.00
                 |
                 ----------+---------+---------+
                           1         2         3
                            Frequency
      
      
                                    SAS システム                             6
                                                  16:45 Wednesday, May 8, 2002
             Frequency
      
             5 +       *****                                                  
               |       *****                                                  
             4 +       *****                                                  
               |       *****                                                  
             3 +       *****                                                  
               |       *****                                                  
             2 +       *****       *****                   *****              
               |       *****       *****                   *****              
             1 +       *****       *****       *****       *****              
               |       *****       *****       *****       *****              
               --------------------------------------------------------
                         45          55          65          75
                                   TAIJYUU Midpoint
      
                                    SAS システム                             7
                                                  16:45 Wednesday, May 8, 2002
      
           プロット : SHINTYOU*TAIJYUU.  凡例: A = 1 OBS, B = 2 OBS, ...
      
          SHINTYOU |
               200 +
                   |
                   |
               180 +                                           A
                   |                      A
                   |          A         A     A                A
               160 +         A  A
                   |    B
                   |
               140 +
                   ---+-----------+-----------+-----------+-----------+--
                     40          50          60          70          80
                                           TAIJYUU
      
      
    4. 出力からの知見 :
      • 身長と体重には関係がありそうだ
      • 各平均をヒストグラムや散布図と比較してみよ
      • ... (詳しくは後日説明する)

    5. プログラムの保存 :
      Programエリアのコマンド行で : [入力] file 'les0402.sas'

  4. 出力結果の保存 : Outputエリアの内容をファイルに保存
    解析結果を保存しておくため。印刷、レポート、...
    1. プログラムを実行(SUBmit)する前に、
      Outputエリアの過去の記録を消去しておく: [入力] clear
      この処理をしておかないと、過去の全ての(不要な、多大な)記録が全部保存される
    2. 出力結果の保存 :
      Outputエリアのコマンド行で : [入力] file 'les0402.lst'
      プログラムの保存と同じコマンドだが、保存対象が異なる
    3. 各種エリアの保存や呼び出しについては、以後、いちいち指示しない。 各自で判断してほしい。
    4. Windows 側に転送して、レポート作成に利用。
      • Windows 側で読み出せるか、実際に転送してみよ(来週にでも)。
      • 転送の際は、転送モード(ASCII)、文字コード(EUC)に注意すること。

  5. 次回は、... : 5月23日 14:45
    • 5月16日はデータの電子化と転送作業、3つ以上 : 私は不登校
      • 以後の講義で使うので作業を完了しておくこと。
      • ファイル名は各自で命名し、記録せよ。

    • 基礎統計量、グループ毎の統計量、...
    • 皆さんのデータを使った解析
    • 興味あるデータの特性を明らかにしていこう
[DIR]講義のホームページへ戻ります