プログラムの構成と編集

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

前回は SAS を使うための操作方法やコマンドを中心に説明を行った。 今回は、SAS のプログラムについて構成を解説すると共に、 修正方法についても説明する。
  1. プログラムとその出力結果
    1. 前回のプログラム : Programエリア : les0301.sas
      • はじめてのプログラム : 右側は説明用。プログラムは左側のみ。
      • 3つのパート : コメント、データの定義(data部)、緒処理の実行(proc部)
      • コメントは後々のために入れる習慣を付けよう
      • ブランクは無視されるが見易さのために入れよう
      • 各行は(基本的に)セミコロンで終わる
      • (基本的には) proc コマンド(procedure)ごとに出力が得られる
       /* Lesson 3-1 */                             : コメント、実行に無関係
       /*    File Name = les0301.sas  04/26/01   */ : 後々の記録のためのメモ
                                                    : 見易さのための空行
      data kenshin;                                 : データ名の定義
        input name $ height weight;                 : 読み込む変量名、型($は文字型を示す)
      cards;                                        : データの始まりを示す
        koizumi     156  44                         : Case 1
        hashimoto   165  58                         :      2
        asou        157  43                         :      3
        kamei       159  44                         :      4
        mori        162  44                         :      5
        nonaka      159  59                         :      6
      ;                                             : データの終りを示す
      proc print data=kenshin;                      : 読み込んだデータの表示
      run;                                          : 上記の実行
      proc means data=kenshin;                      : 平均値等の算出
      run;                                          : 上記の実行
      

    2. 前回の出力 : Outputエリア : les0301.lst
      1. 読み込んだデータの表示 : proc print
        • 縦方向にケース、横方向に変量
        • 左端にケース番号
        • 入力が期待通りかを確認 : 数値のずれ、異常値、...
      2. 平均値等の算出 : proc means
        • 各変量ごとのサンプル数、平均、標準偏差、最小値、最大値
        • 小サンプル時の注意
      3. 有効数字に注意せよ : どこまでが「意味ある桁」か?
        [蛇足的例] 日本の観測史上の 最高気温は、1933(昭和8)年7月25日に山形市で 40.8度が記録され、 最低気温は、1902(明治35)年1月25日に北海道旭川市で -41度が記録された。
                                    SAS システム                             1
                                                  13:35 Sunday, April 22, 2001
      
                        OBS    NAME        HEIGHT    WEIGHT
      
                         1     koizumi       156       44  
                         2     hashimot      165       58  
                         3     asou          157       43  
                         4     kamei         159       44  
                         5     mori          162       44  
                         6     nonaka        159       59  
      
                                    SAS システム                             2
                                                  13:35 Sunday, April 22, 2001
      
        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エリアに表示される
      • 綴りミスはある程度修正されるが、致命的なミスの時は実行が中断される
        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/26/01   */           :
                                                               :
      data gakusei;                                            : データ名の定義
        infile 'les0201.prn';                                  : ファイル名の指定
        input sex $ shintyou taijyuu kyoui jitaku $ kodukai;   : 変量名、型
                                                               :
      proc print data=gakusei(obs=5);                          : データの表示(先頭5ケース)
      run;                                                     :
      proc means data=gakusei;                            : 平均、標準偏差、最大最小値の算出
      run;                                                     :
      
    3. 出力結果 : les0302.lst
                                    SAS システム                             1
                                                15:29 Saturday, April 21, 2001
      
          OBS    SEX    SHINTYOU    TAIJYUU    KYOUI    JITAKU    KODUKAI
      
            1     M       180.3       61.0        .                     .
            2     F       148.0       42.0        .       J         50000
            3     M       168.6       57.2        .       J          7000
            4     M       181.0       60.0       80       G        160000
            5     F       167.0       53.0       85       G        130000
      
                                    SAS システム                             2
                                                15:29 Saturday, April 21, 2001
      
        Variable   N          Mean       Std Dev       Minimum       Maximum
        --------------------------------------------------------------------
        SHINTYOU  12   169.2666667    10.2960128   148.0000000   181.0000000
        TAIJYUU   11    57.0545455     6.8714429    42.0000000    65.0000000
        KYOUI      5    84.6000000     2.8809721    80.0000000    88.0000000
        KODUKAI   11      64272.73      59378.60             0     160000.00
        --------------------------------------------------------------------
      
    4. プログラムの保存 :
      Programエリアのコマンド行で : [入力] file 'les0302.sas'

  3. データを視覚的に捉える: ヒストグラム、散布図
    1. 今までのプログラムに追加 : プログラム : les0401.sas
       /* Lesson 4-1 */                                      
       /*    File Name = les0401.sas   05/10/01   */         
                                                             
      data gakusei;                                          
        infile 'les0201.prn';                                
        input sex $ shintyou taijyuu kyoui jitaku $ kodukai; 
                                                             
      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. 出力結果 : les0401.lst : 一部省略あり
                                    SAS システム                             3
                                                    15:47 Tuesday, May 8, 2001
      
           SHINTYOU                                Cum.              Cum.
           Midpoint                          Freq  Freq  Percent  Percent
                      |
                150   |*****                    1     1     8.33     8.33
                      |
                160   |***************          3     4    25.00    33.33
                      |
                170   |********************     4     8    33.33    66.67
                      |
                180   |********************     4    12    33.33   100.00
                      |
                      -----+----+----+----+
                           1    2    3    4
                            Frequency
      
                                    SAS システム                             4
                                                    15:47 Tuesday, May 8, 2001
      
      TAIJYUU                                          Cum.              Cum.
      Midpoint                                   Freq  Freq  Percent  Percent
                |
           45   |*****                              1     1     9.09     9.09
                |
           51   |**********                         2     3    18.18    27.27
                |
           57   |**********                         2     5    18.18    45.45
                |
           63   |******************************     6    11    54.55   100.00
                |
                -----+----+----+----+----+----+
                     1    2    3    4    5    6
                           Frequency
      
                                    SAS システム                             5
                                                    15:47 Tuesday, May 8, 2001
      
             Frequency
      
             4 +                               *****       *****              
               |                               *****       *****              
             3 +                   *****       *****       *****              
               |                   *****       *****       *****              
             2 +                   *****       *****       *****              
               |                   *****       *****       *****              
             1 +       *****       *****       *****       *****              
               |       *****       *****       *****       *****              
               --------------------------------------------------------
                        150         160         170         180
                                   SHINTYOU Midpoint
      
      
                                    SAS システム                             7
                                                    15:47 Tuesday, May 8, 2001
      
           プロット : SHINTYOU*TAIJYUU.  凡例: A = 1 OBS, B = 2 OBS, ...
                (NOTE: 1 オブザベーションが欠損値です.)
           180 +                                                A A         A
               |                                                A     AA
      SHINTYOU |
               |                               A         A
               |
           160 +                      A             A
               |
               |
               |     A
               |
           140 +
               -+-----------+-----------+-----------+-----------+-----------+-
               40          45          50          55          60          65
                                           TAIJYUU
      
      
    4. 出力からの知見 :
      • 身長と体重には関係がありそうだ
      • 各平均をヒストグラムや散布図と比較してみよ
      • ...

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

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

  5. 次回は、... : 5月24日 14:45
    • 17日はデータの電子化作業、3つ以上 : 私は不登校
    • 基礎統計量、グループ毎の統計量、...
    • 皆さんのデータを使った解析
    • 興味あるデータの特性を明らかにしていこう
[DIR]講義のホームページへ戻ります