ファイルからの読み込み

統計解析 06 クラス : 第04回 (10/25/06)

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

    1. 新しいプログラムを作る時にはまず現在のプログラムを消去
      Program Editorエリアのコマンド行で : [入力] clear
    2. プログラム : les0401.sas
     /* Lesson 4-1 */                               :
     /*    File Name = les0401.sas   10/25/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. 出力結果、計算結果 : les0401.lst
      • 画面の移動には BACKward, FORWard, TOP, BOTtom コマンドを使う。
      • 意図通りにファイルからデータが読み込まれていることを確認せよ。
                                    SAS システム                             1
                                               17:36 Tuesday, October 24, 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
                                               17:36 Tuesday, October 24, 2006
             Analysis Variable : TOCHI
      
              N          Mean       Std Dev       Minimum       Maximum
             ----------------------------------------------------------
             60       4053.98       5987.72             0      37779.00
             ----------------------------------------------------------
      
    2. プログラムの保存 :
      Program Editorエリアのコマンド行でプログラムを recall 後 : [入力] file 'les0401.sas'

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

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

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

  3. 再度改良

    1. 今までのプログラムに追加 : les0403.sas
     /* Lesson 4-3 */
     /*    File Name = les0403.sas   10/25/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. 出力結果 : les0403.lst : 以下掲載分には一部省略あり
                                    SAS システム                             1
                                               17:36 Tuesday, October 24, 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
                                               17:36 Tuesday, October 24, 2006
             Analysis Variable : TOTAL
      
              N          Mean       Std Dev       Minimum       Maximum
             ----------------------------------------------------------
             60       6537.67       7631.23             0      45629.00
             ----------------------------------------------------------
      <中略>
                                    SAS システム                             5
                                               17:36 Tuesday, October 24, 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
                                               17:36 Tuesday, October 24, 2006
      Frequency
         |       *****                                                        
      45 +       *****                                                        
         |       *****                                                        
      30 +       *****                                                        
         |       *****                                                        
      15 +       *****                                                        
         |       *****                                                        
         --------------------------------------------------------------------
                 10000       20000       30000       40000       50000
                                    TOTAL Midpoint
      
    3. 出力からの知見 :
      • 入力した全変量が正しく読み込まれているかを先頭 5ケースで確認
      • ヒストグラムの区切り幅を換えると分布のイメージが変化する
      • 平均値はヒストグラムのどこに位置するか?
      • 平均値が分布形状を想像するに足る情報であろうか?
        • 対称分布の場合だけ
        • それでも広がりは判らない
      • ...

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

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

  5. 漢字コード変換 : 計算結果には日本語が含まれている
    漢字の表現方法(漢字コード)には幾つかの体系があって、異なったコード体系間では 変換を行わないと正常には読み出せない。
    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 les0403.lst > les0403s.lst

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

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

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

    [補足] nkf には他に、「-e」オプション(EUCコードに変換)、 「-j」オプション(JISコードに変換)がある。

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

      • 興味のあるデータを見つけて、電子化
      • 電子化したデータを stat システムに転送しておくこと

  7. [おまけ] いくつかのファイル形式 : デリミタの指定
    Excel 等で入力したデータを SAS に読み込ませる場合、 講義の中では「スペース区切り(*.prn)」を紹介した。 これ以外の形式のファイルも読み込めるものがあり、 その場合には以下のような SAS のプログラムを用いる。
    「スペース区切り」の場合、セル幅を上手く調節しないと意図通りに読み込ませる ことができないことを経験したかもしれないが、以下の区切り記号の場合は、 そのような心配は生じないので便利だと思われる。

    1. カンマ区切り(csv 形式)のファイルを読む場合 : *.csv
      [コメント] 以下の指定を行っても「,,」と言うように コンマが続いている csv 形式のファイル(欠損値を含んだファイル)はうまく読めない。 エディタ等で事前に「,.,」や「,0,」と置換しておく必要がある。
      data mon2006;
        infile 'd:\home\mon05d.csv' dlm=',' 
               firstobs=2
               truncover; 
      

    2. タブ区切りのファイルを読む場合 : *.txt
      data mon2006;
        infile 'd:\home\mon05e.txt' dlm='09'x 
               firstobs=2
               truncover; 
      
[DIR]講義のホームページへ戻ります