SAS の初歩プログラミング

コンピュータ応用 D クラス : 第6回目(05/29/97)

前回は SAS を使うための操作方法やコマンドを中心に説明を行った。 今回は、SAS のプログラムについて解説する。
  1. プログラムとその出力結果
    1. 先週のプログラム : プログラムエリア : ken01.sas
      • はじめてのプログラム : 右側は説明用。プログラムは左側のみ。
      • 3つのパート : コメント、データの定義(data部)、緒処理の実行(proc部)
      • コメントは後々のために入れる習慣を付けよう
      • ブランクは無視されるが見易さのために入れよう
      • 各行は基本的にセミコロンで終わる
      • run コマンドごとに出力が得られる
       /* Lesson 5-1 */                             : コメント、実行に無関係
       /*    File Name = ken01.sas   05/22/97   */  : 後々の記録のためのメモ
                                                    :
      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 エリア : ken01.out
      1. 読み込んだデータの表示
        • 縦方向にケース、横方向に変量
        • 左端にケース番号
        • 入力が期待通りかを確認 : 数値のずれ、異常値、...

      2. 平均値等の算出
        • 各変量ごとのサンプル数、平均、標準偏差、最小値、最大値
                                SAS システム                                1
                                                20:02 Wednesday, May 21, 1997
      
                     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
                                                 20:02 Wednesday, May 21, 1997
      
      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. 再実行しエラーがなくなるまで修正を繰り返す

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

    Lesson 6-1: 皆さんの 性別、身長、体重、胸囲データ(taikaku.dat) をファイルから読み込んで各変量の平均を求めよう。 なお、ファイル名は各自で命名したものを指定せよ。 ここでは「taikaku.dat」という名前で説明する。

    1. 新しいプログラムを作る時にはまず現在のプログラムを消去
      プログラムエリアのコマンド行で : [入力] clear
    2. プログラム : anke01.sas
       /* Lesson 6-1 */                              :
       /*    File Name = anke01.sas   05/29/97   */  :
                                                     :
      data gakusei;                                  : データ名の定義
        infile 'taikaku.dat';                        : ファイル名の指定
        input seibetsu $ shintyou taijyuu kyoui;     : 変量名、型
                                                     :
      proc print data=gakusei;                       : データの表示
      run;                                           :
      proc means data=gakusei;                       : 平均、分散、最大最小値の算出
      run;                                           :
      
    3. 出力結果 : anke01.out

                                  SAS システム                                1
                                                   10:35 Thursday, May 29, 1997
      
                OBS    SEIBETSU    SHINTYOU    TAIJYUU    KYOUI
      
                  1       F          148.9         .         .
                  2       M          156.0        61        90
                  3       F          156.0         .         .
                  4       F          156.5         .         .
                  5       F          157.0        43         .
                  6       F          160.0         .         .
                  7       F          161.0         .         .
                (中略)
                 36       M           177         65         .
                 37       M           182         60        87
                 38       M           182         70        90
                 39       M             .          .         .
                 40       F             .          .         .
                 41       M             .          .         .
                                  SAS システム                                4
                                                   10:35 Thursday, May 29, 1997
      
      Variable   N          Mean       Std Dev       Minimum       Maximum
      --------------------------------------------------------------------
      SHINTYOU  38   167.6578947     7.3985255   148.9000000   182.0000000
      TAIJYUU   27    61.2370370     7.3472731    43.0000000    77.0000000
      KYOUI     11    88.8181818     6.0633024    80.0000000   100.0000000
      --------------------------------------------------------------------
      
    4. プログラムの保存 :
      プログラムエリアのコマンド行で : [入力] file 'anke01.sas'

  3. 特定の変数の解析 : 変量が多いが全変量の出力は必要ない時。
    [例] Lesson 6-2 : 身長のみを計算対象とする
    プログラム : anke02.sas、出力結果 : anke02.out

    proc means data=gakusei;                   : 平均等の算出
       var shintyou;                           : 身長について
    run;                                       : 
    

  4. 出力するデータ数を限定 : ケース数が多くて出力が大量になり過ぎるような時。
    データの目視検査の意味で、一回は出力すべきだが、確認が済んだ後は 先頭の数ケースを表示しておけば事足りる。
    [例] Lesson 6-3 : 先頭の10ケースを表示
    プログラム : anke03.sas、出力結果 : anke03.out

    proc print data=gakusei(obs=10);           : データを先頭の10ケースだけ表示
    run;                                       : 
    

  5. 性別ごとの分析 : 男性だけの、女性だけの。より性質がはっきりする。
      : ある特性ごとにグルーピングして解析
      : 身長と体重について男女で差があるか?

    1. 上記プログラムを修正 : Lesson 6-4 : プログラム : anke04.sas

       /* Lesson 6-4 */
       /*    File Name = anke04.sas   05/29/97   */
      
      data gakusei;
        infile 'taikaku.dat';
        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. 出力結果 : anke04.out : 男性と女性では身長や体重の平均に違いがあるのを確認せよ。

                                  SAS システム                               12
                                                   11:29 Thursday, May 29, 1997
      
      Variable   N          Mean       Std Dev       Minimum       Maximum
      --------------------------------------------------------------------
      SHINTYOU  38   167.6578947     7.3985255   148.9000000   182.0000000
      TAIJYUU   27    61.2370370     7.3472731    43.0000000    77.0000000
      --------------------------------------------------------------------
      
      
                                  SAS システム                               13
                                                   11:29 Thursday, May 29, 1997
      
      ------------------------------- SEIBETSU=F ------------------------------
      
      Variable   N          Mean       Std Dev       Minimum       Maximum
      --------------------------------------------------------------------
      SHINTYOU  12   160.5250000     5.7458483   148.9000000   170.0000000
      TAIJYUU    1    43.0000000             .    43.0000000    43.0000000
      --------------------------------------------------------------------
      
      
                                  SAS システム                               14
                                                   11:29 Thursday, May 29, 1997
      
      ------------------------------- SEIBETSU=M ------------------------------
      
      Variable   N          Mean       Std Dev       Minimum       Maximum
      --------------------------------------------------------------------
      SHINTYOU  26   170.9500000     5.5491441   156.0000000   182.0000000
      TAIJYUU   26    61.9384615     6.5058790    52.0000000    77.0000000
      --------------------------------------------------------------------
      
    3. プログラムの保存 :

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

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

  6. 出力結果の保存 : アウトプットエリアの内容をファイルに保存
    解析結果を保存しておくため。印刷、レポート、...

    1. プログラムを実行(SUBmit)する前に、 アウトプットエリアの過去の記録を消去しておく: [入力] clear
      この処理をしておかないと、過去の全ての記録が全部保存される
    2. 出力結果の保存 :
      アウトプットエリアのコマンド行で : [入力] file 'anke04.out'
      プログラムの保存と同じコマンドだが、保存対象が異なる
    3. 以後、各種エリアの保存や呼び出しについてはいちいち指示しない。 各自の判断で作業してほしい。
    4. 考察例 : 解析結果から、いくつかの知見が導き出せる
      • 平均的にみて女性より男性の方が身長が 10cm 程高い
      • 最小値、最大値を見ても並行的に男性の方が高い
      • 身長の分散に違いは見られないようだ
      • 体重の性別による比較は女性のサンプル数が少ないのでできない
      • ...

  7. 宿題 : 6月5日にでも実習してください <=== 私は登校しない
    以前、電子化してもらったデータを今回の演習例を参考に解析してみよ。
    1. 皆さんの体格に関するデータ(taikaku.dat)
    2. 皆さんの小遣いに関するデータ(kodukai.dat)
    3. [Option]今までに収集したデータ(J:\センター設置科目\応用D\all.dat)
      アンケートデータを集積したもの。6変量、274ケース。
    4. 連休中に収集してもらった興味あるデータ(個人ごとに異なるはず)

    5. レポート提出 : 6月12日 14:45 までに : 電子メールかワープロで。 手入力を少なくして SAS の出力を最大限有効利用せよ。 また、不要な部分はカットせよ。手書きは不可。
    6. 解析結果だけでなく、データ自身の説明やどういうところに興味を持って対象に選んだかの理由等も報告する事。考察も大事。

  8. 次回は、... : 6月12日 14:45
    • 基礎統計量、分布形状の把握
    • 興味あるデータの特性を明らかにしていこう



  9. 時間があれば(次回?) : Lesson 6-5 : 皆さんのデータ の基礎統計量を求めてみよう
    プログラム : anke05.sas、 出力結果 : anke05.out

    proc univariate data=gakusei;                  : 基礎統計量の算出
    run;                                           :
    
[DIR]講義のホームページへ戻ります