SAS の初歩プログラミング

統計処理 01 クラス : 第6回目(06/08/00)

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

    2. 前回の出力 : Output エリア : les0401.lst
      1. 読み込んだデータの表示
        • 縦方向にケース、横方向に変量
        • 左端にケース番号
        • 入力が期待通りかを確認 : 数値のずれ、異常値、...

      2. 平均値等の算出
        • 各変量ごとのサンプル数、平均、標準偏差、最小値、最大値
                                    SAS システム                             1
                                                 15:55 Wednesday, May 17, 2000
      
                        OBS    NAME        HEIGHT    WEIGHT
      
                         1     asakawa       156       44  
                         2     sakaguch      165       58  
                         3     yano          157       43  
                         4     imamura       159       44  
                         5     esaka         162       44  
                         6     takahash      159       59  
      
                                    SAS システム                             2
                                                 15:55 Wednesday, May 17, 2000
      
        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. 実行時にエラーが出なければ良いのだが... : デバッグ
      • アウトプットエリアに順に期待した結果が表示されるのなら正常
      • エラーがあれば Logエリアに表示される
      • 綴りミスはある程度修正されるが、致命的なミスの時は実行が中断される
        1. 画面が三種類ある : Program, Output, Log
          必要に応じて各エリアを行き来する。コマンド行で。
          1. プログラムエリアへ : PGM
          2. ログエリアへ : LOG
          3. アウトプットエリアへ : OUTput
        2. プログラムのエラー個所を Logエリアで確認
        3. プログラムエリアに移って該当個所を修正
        4. 再実行しエラーがなくなるまで修正を繰り返す
      • エラーの例 : Logエリアに実行結果が表示される
        1. セミコロン忘れ
        2. コメントの終了ミス : /* ... */
        3. つづりミス : plint
        4. 変量名の順やタイプが異なる : $ マークの位置
        5. データファイルの内容が記述(or 予想)と異なる
        6. ...

  2. データをファイルから読み込む
    データが追加されたり、別クラスのデータを解析したくなったら??
    : データをファイルから読み込んで処理しよう
    : 大量データや定型的な処理に有効

    Lesson 4-2 : Lesson 2-1 で作ったデータをファイルから読み込んで各変量の平均を求めよう。 なお、ファイル名は各自で命名したものを指定せよ。
    ここでは「les0201.prn」という名前で説明する。

    1. 新しいプログラムを作る時にはまず現在のプログラムを消去
      プログラムエリアのコマンド行で : [入力] clear
    2. プログラム : les0402.sas
       /* Lesson 4-2 */                                        :
       /*    File Name = les0402.sas   05/18/00   */           :
                                                               :
      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. 出力結果 : les0402.lst

                                    SAS システム                             1
                                                 15:57 Wednesday, May 17, 2000
      
          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:57 Wednesday, May 17, 2000
      
        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. プログラムの保存 :
      プログラムエリアのコマンド行で : [入力] file 'les0402.sas'

  3. 体格データの基礎統計量を計算させてみよう
    Lesson 6-1 : 第2回の実習で入力してもらった 皆さんの体格データ( 性別、身長、体重、胸囲 )をファイルから読み込んで各変量の基礎統計量を求めよう。 なお、ファイル名は各自で命名したものを指定せよ。 ここでは「taikaku00.prn」という名前で説明する。

    1. 新しいプログラムを作る時にはまず現在のプログラムを消去
      プログラムエリアのコマンド行で : [入力] clear
    2. プログラム : les0601.sas
       /* Lesson 6-1 */                              :
       /*    File Name = les0601.sas   06/08/00   */ :
                                                     :
      data gakusei;                                  : データ名の定義
        infile 'taikaku00.prn';                      : ファイル名の指定
        input seibetsu $ shintyou taijyuu kyoui;     : 変量名、型
                                                     :
      proc print data=gakusei(obs=10);               : データを先頭の10ケースだけ表示
      run;                                           :
      proc means data=gakusei;                       : 平均、標準偏差、最大最小値の算出
      run;                                           :
      
    3. 出力結果 : les0601.lst

                                    SAS システム                             1
                                                   19:13 Tuesday, June 6, 2000
      
                  OBS    SEIBETSU    SHINTYOU    TAIJYUU    KYOUI
      
                    1       F          148.0        42         . 
                    2       F          158.0        49        85 
                    3       F          159.0        49        88 
                    4       M          160.0        55         . 
                    5       F          160.0         .         . 
                    6       M          160.0        55         . 
                    7       F          160.0        50        89 
                    8       F          160.4        54         . 
                    9       F          162.0        52        86 
                   10       F          163.0        52         . 
      
                                    SAS システム                             2
                                                   19:13 Tuesday, June 6, 2000
      
        Variable   N          Mean       Std Dev       Minimum       Maximum
        --------------------------------------------------------------------
        SHINTYOU  49   169.9816327     7.6466135   148.0000000   186.0000000
        TAIJYUU   46    59.9130435     8.0527320    42.0000000    82.0000000
        KYOUI     19    87.3157895     5.2710175    75.0000000    96.0000000
        --------------------------------------------------------------------
      
    4. プログラムの保存 :
      プログラムエリアのコマンド行で : [入力] file 'les0601.sas'

  4. 特定の変数の解析 : 全変量の出力は必要ない時
    Lesson 6-2 : 身長と体重のみを計算対象とする
    1. プログラム : les0602.sas : [参考] : i コマンドの活用
      proc means data=gakusei;                   : 平均等の算出
         var shintyou taijyuu;                   : 身長と体重について
      run;                                       : 
      
    2. 出力結果 : les0602.lst

                                    SAS システム                             2
                                                   19:13 Tuesday, June 6, 2000
        Variable   N          Mean       Std Dev       Minimum       Maximum
        --------------------------------------------------------------------
        SHINTYOU  49   169.9816327     7.6466135   148.0000000   186.0000000
        TAIJYUU   46    59.9130435     8.0527320    42.0000000    82.0000000
        --------------------------------------------------------------------
      
  5. 性別ごとの分析 : 男性だけの、女性だけの。より性質がはっきりする。
      : ある特性ごとにグルーピングして解析
      : 身長と体重について男女で差があるか?

    1. 上記プログラムを修正 : Lesson 6-3 :プログラム : les0603.sas
      [参考] : cc, a(または b), i, 場合によって d, dd コマンドの活用

       /* Lesson 6-3 */
       /*    File Name = les0603.sas   06/08/00   */
      
      data gakusei;
        infile 'taikaku00.prn';
        input seibetsu $ shintyou taijyuu kyoui;
      
      proc print data=gakusei(obs=10);
      run;
      proc means data=gakusei;                   : 平均、標準偏差、最大最小値の算出
         var shintyou taijyuu;                   : 身長と体重について
      run;                                       :
      proc sort data=gakusei;                    : 並べ替え(ソート)
         by seibetsu;                            : 性別ごとに
      run;                                       : 
      proc means data=gakusei;                   : 平均、標準偏差、最大最小値の算出
         var shintyou taijyuu;                   : 身長と体重について
         by seibetsu;                            : 性別ごとに
      run;                                       : 
      
    2. 出力結果 : les0603.lst : 男性と女性では身長や体重の平均に違いがあるのを確認せよ。

                                    SAS システム                             1
                                                   19:13 Tuesday, June 6, 2000
      
                  OBS    SEIBETSU    SHINTYOU    TAIJYUU    KYOUI
      
                    1       F          148.0        42         . 
                    2       F          158.0        49        85 
                    3       F          159.0        49        88 
                    4       M          160.0        55         . 
                    5       F          160.0         .         . 
                    6       M          160.0        55         . 
                    7       F          160.0        50        89 
                    8       F          160.4        54         . 
                    9       F          162.0        52        86 
                   10       F          163.0        52         . 
      
                                    SAS システム                             2
                                                   19:13 Tuesday, June 6, 2000
      
        Variable   N          Mean       Std Dev       Minimum       Maximum
        --------------------------------------------------------------------
        SHINTYOU  49   169.9816327     7.6466135   148.0000000   186.0000000
        TAIJYUU   46    59.9130435     8.0527320    42.0000000    82.0000000
        --------------------------------------------------------------------
      
                                    SAS システム                             3
                                                   19:13 Tuesday, June 6, 2000
      
      ------------------------------ SEIBETSU=' ' ----------------------------
      
      
        Variable   N          Mean       Std Dev       Minimum       Maximum
        --------------------------------------------------------------------
        SHINTYOU   0             .             .             .             .
        TAIJYUU    0             .             .             .             .
        --------------------------------------------------------------------
      
                                    SAS システム                             4
                                                   19:13 Tuesday, June 6, 2000
      
      ------------------------------- SEIBETSU=F -----------------------------
      
      
        Variable   N          Mean       Std Dev       Minimum       Maximum
        --------------------------------------------------------------------
        SHINTYOU  14   161.5285714     4.7753258   148.0000000   167.0000000
        TAIJYUU   11    49.8181818     3.2807981    42.0000000    54.0000000
        --------------------------------------------------------------------
      
                                    SAS システム                             5
                                                   19:13 Tuesday, June 6, 2000
      
      ------------------------------- SEIBETSU=M -----------------------------
      
      
        Variable   N          Mean       Std Dev       Minimum       Maximum
        --------------------------------------------------------------------
        SHINTYOU  35   173.3628571     5.7128383   160.0000000   186.0000000
        TAIJYUU   35    63.0857143     6.2712764    51.5000000    82.0000000
        --------------------------------------------------------------------
      
    3. プログラムの保存 :

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

    [テクニック] 層を分けて分析する場合は、事前に並べ替えが必要

  6. 出力結果の保存 : アウトプットエリアの内容をファイルに保存
    解析結果を保存しておくため。印刷、レポート、...
    1. プログラムを実行(SUBmit)する前に、 アウトプットエリアの過去の記録を消去しておく: [入力] clear
      この処理をしておかないと、過去の全ての記録が全部保存される
    2. 出力結果の保存 :
      アウトプットエリアのコマンド行で : [入力] file 'les0603.lst'
      プログラムの保存と同じコマンドだが、保存対象が異なる
    3. 以後、各種エリアの保存や呼び出しについてはいちいち指示しない。 各自の判断で作業してほしい。
    4. 考察例 : 解析結果から、いくつかの知見が導き出せる
      • 男女比は 3:1 程度。
      • 平均的にみて男性の方が、身長は 12cm 程高く、体重は 13Kg 程重い。
      • 最小値、最大値共、男姓が女性より大きい。
      • 標準偏差は、全体で見るよりも分離した時の方が小さい。
      • ...

  7. 演習 : 以前、電子化してもらったデータを 今回の演習例を参考に解析してみよ。 解析結果だけでなく、データ自身の説明やどういうところに興味を持って 対象に選んだかの理由等も報告する事。考察も大事。
    [補足] : 夏休みまでに提出してもらう。期日は後日指定する。
    1. 皆さんの小遣いに関するデータ(kodukai00.prn)
    2. 連休中に収集してもらった興味あるデータ(個人ごとに異なるはず)

  8. 次回は、... : 6月15日 14:45
    • 基礎統計量、分布形状の把握
    • 興味あるデータの特性を明らかにしていこう
[DIR]講義のホームページへ戻ります