データの電子化、転送とファイルからの読み込み

統計解析 03 クラス : 第03回 (10/16/03)

 前回は SAS を使うための操作方法やコマンドを中心に説明を行った。 しかし、解析対象データを毎回プログラム中に書いて/修正して実行させるのは 煩雑なので、一般的にはデータをファイルから読み込んで解析することが多く、 そのためには、データを電子化してファイルを作る必要がある。 今回は、このために知っておくべき技術について紹介する。
  1. データをファイルから読み込んで使うには...
    1. データを電子化する : Excel やエディタ等で ===> 第2節
    2. ファイルを stat システムに転送する : FFFTP 等で ===> 第3節
    3. 転送が期待通り行なわれたかを確認する : UNIX のコマンドで ===> 第4節
    4. データをファイルから読み込むように SAS プログラムを記述する ===> 第5節
    5. デバッグ : SAS を使うためには避けて通れない ===> 第6節
    6. 計算結果の保存と転送 : レポート作成に必要 ===> 第7節
    7. SAS プログラムを軽快に改良する ===> 次回

  2. データの電子化
    取り扱うデータが長方形(表形式)をしているので、Windows 上の 表計算ソフトと呼ばれるアプリケーションを利用するのが便利である。 ここでは、Microsoft Excel を例に実際に電子化の手順を説明する。 なお、Excel のより詳しい使い方については、 「PC・ネットワーク利用ガイド」や市販の書籍を参考にしてほしい。
    ここでは、データは縦方向にケース(サンプル)が、横方向に変量が、 並んでいるとして、説明を進める。
    1. Excel の起動
      「スタート」→「プログラム(P)」→「Microsoft Office」→「Microsoft Excel」とクリックする。

    2. データの入力
      表示された枠に「表形式」と呼ばれる並び(縦:ケース、横:変量) で順にデータをキー入力していく。なお、実習では半角英数字のみを取り扱うことにする。
      カーソルの移動には、「Tab」キー(右方向へ移動)や 「Enter」キー(下方向へ移動)が便利である。 矢印キーやマウスで移動させることもできるが、次変量の入力のための移動に これらを使うと入力スピードが遅くなるので得策ではない。

      [Lesson 3-1] : データの電子化 : 小泉内閣の資産公開資料のデータを電子化せよ。

      • [注意1] 各項目内に空白は入れないこと : SAS は空白を区切り記号と判断するため
          (今回の例ではあまり起らないと思うが)
      • [注意2] データの電子化時に、「コード化」を平行して行う必要があるかも。
        • 欠測値(欠損値、不明)データには「.(ピりオド)」を入力。 : データ採取は難しい!!
        • 名前はローマ字(アルファベット)に書き換える。
        • 「男/女」を「M/F」等と置き換える。
        • 「自宅生/下宿生」を「J/G」等と置き換える。
        • 「携帯電話会社名」を適当な省略形に置き換える。
      [補足] SAS は漢字を含むデータを読み込むことができる。 しかし、日本語入力のための作業時間がかかる点や、 ファイル転送時の指定を厳密に行う必要がある点等を考慮して、 講義の中では取り扱わず、半角英数字のみを用いる。

      [データ] 第1次小泉内閣の閣僚資産データ(2001年5月29日発表)
      Name Sex Goukei Tochi Yotyokin Kashituke Kariire
      Koizumi M 5012 3052 1960 0 731
      Katayama M 7874 1371 6502 0 2697
      Moriyama F 12606 6907 5699 0 0
      Tanaka F 74940 31739 43201 0 0
      Shiokawa M 56561 54336 2225 7500 0
      Touyama F 24146 10901 13245 0 2200
      Sakaguchi M 2601 451 2150 0 140
      Takebe M 5084 2796 2288 0 549
      Hiranuma M 4723 451 223 0 12682
      Ohogi F 19554 18354 1200 7102 36000
      Kawaguchi F 13550 1490 12060 0 0
      Fukuda M 8089 7272 817 1130 7600
      Murai M 6492 1669 4823 0 260
      Nakatani M 1620 0 1620 0 0
      Omi M 3278 3278 0 1800 1764
      Yanagisawa M 5375 2475 2900 0 2205
      Takenaka M 2808 2651 157 9475 10456
      Ishihara M 5932 2347 3585 0 3230

      [入力画面]
      入力画面(拡大)

    3. 項目の右揃え
      SAS は空白(スペース)を区切り文字として、テキストファイルからデータを 読み込むことができる。つまり各項目間には空白を入れておく必要がある。 しかし、氏名や性別、また欠損値を示す「.」 は Excel 内では 「文字型」と判断されてデフォルトでは「左寄せ」で出力されてしまい 左隣の項目が「数値型(右寄せ)」だとくっついてしまう。 そこでこの現象を回避するために全ての項目を「右揃え」してから 保存するようにしておく。
      表の左上の何も書いていないボタンをクリックすると「表全体」 が選択されて反転表示されるので、この状態で「右揃え」ボタンを押す。
      また、今回の例では発生しないかもしれないが、 項目一つあたりの入力文字数の多い(つまり長い)項目の場合も、 隣のセルの項目とくっついて表示されてしまうことがある。 そのような場合は、列の幅を大きくして隙間を空けておく。

    4. データの保存 : テキスト形式で
      Excel の標準形式(*.xls)で保存すると、SAS では利用できないので、 テキスト形式で保存する必要がある。 「ファイル(F)」→「名前を付けて保存(A)」で保存できる。 ドライブ名やファイル名を指定後、 「ファイルの種類」の項に対して「テキスト(スペース区切り)(*.prn)」を指定する。
      「選択したファイルの種類は複数のシートを含むブックをサポートしていません」等のメッセーが出る場合があるが、無視してよい。

      [Lesson 3-2] : データの保存 : 演習で入力したデータを SAS で使うことを考慮して テキスト形式で保存せよ。
      この後の説明を簡単にするために、ここでは、ドライブ名に「H:」、 ファイル名に「naikaku01」を指定したとして説明を進める (naikaku01.prn)。
      [補足] また stat システム(UNIX)では、 漢字のファイル名や空白を含むファイル名は取り扱いが面倒なので、 「スペースを含まない英数字で」ファイル名を付けることを勧める。

    5. Excel の終了

    [参考1] 上記ではテキスト形式(*.prn)での保存を 紹介したが、Excel の標準形式(*.xls)でも保存しておくことを勧める (つまり二通りの形式で保存しておくのが良いと思う)。 上記で指摘したように、列幅が足らない状態をテキスト形式で保存すると、 ファイル上で隣同士のセルがくっついてしまい、 以後手作業を行わないと分離できなくなってしまうからである。 Excel の標準形式でも保存してあれば、 このファイルを使って幅を再修正し、テキスト形式で再保存することが可能となる。
    [参考2] H: ドライブは電源を切ると内容が消されてしまう。 バックアップ用に FD や MO を利用すること。 また、メールに添付したり、stat システムに転送してしまう(後述)という手もある。
    [参考3] SAS に読み込ませるデータの形式として、 「テキスト(スペース区切り)」以外に「テキスト(タブ区切り)」、 「カンマ区切り(CSV 形式)」等も利用可能であるが、これらについては後日紹介する。
    [参考4] データの電子化。私の場合。

    1. Excel on Windows : 入力とデータスクリーニング(点検)
    2. エディタ(emacs) on UNIX : 手慣れた文字入力環境

  3. データ転送(送信) : FFFTP を使ったファイルの送受信
    MNC では、漢字コード変換を含むファイルの送受信ツールとして FFFTP が用意されているので、このソフトウェアの使い方を説明する。 なお、これはフリーソフトウェアであるので、自宅から使うような場合は 各自のパソコンにインストールしておくとよいであろう。
    1. [背景] 漢字コードについて
      漢字コードには幾つかの体系があって、異なったコード体系間では 変換を行わないと正常には読み出せない。
      Windows マシンで利用される漢字コードは、 「Shift-JISコード」に固定されているため、この様な混乱は少ない。 しかし、stat システムを含む UNIX マシンの場合は、 「EUC コード」や「JIS コード」が使われることが多く、 Windows マシンとデータを共有しようとすると、 漢字コードの変換を頭に入れて、 適宜変換しながら利用する必要がある。
      • Windows マシン : Shift-JIS コード
      • UNIX マシン : EUC コード, JIS コード

      stat システム上の SAS に関して言えば、SAS の出力中の日本語は 「EUC コード」を使って表現されているので、 SAS の「計算結果」を Windows マシンに転送する時には、 「EUC コード」を「Shift-JIS コード」に変換する必要が生じる。
      また同様の理由で、ファイル名に漢字を使うのは避けるべきである。

    2. 操作手順
      1. 転送プログラム(FFFTP)の起動
        「スタート」→「プログラム(P)」→「stat システム」→「FFFTP」とクリックする。
      2. ホスト「stat-system」を選択し「接続」ボタンをクリックする。
      3. stat システム用の「ユーザー名 :」を入力する。
      4. stat システム用の「パスワード :」を入力する。
      5. 画面の左半分は Windows 側を、 右半分は stat システム側のファイルを表示している。
      6. 転送元のドライブ、ファイルを指定する。
      7. 転送モードには 3種類ある。
        • 「A」は ASCII モード(文字型用、行末コード処理機能を利用する)
        • 「B」は Binary モード(非文字型用、行末コード処理機能を利用しない)
        • 「A/B」は ファイルの拡張子によって自動判定
      8. 漢字コードには 2種類ある。
        • 「EUC」は UNIX 側の漢字コードが EUC コード
        • 「JIS」は UNIX 側の漢字コードが JIS コード
        • 「無」は無変換
      9. ファイルを選択すると、左上にある灰色だった矢印キーが 青に変わってクリック可能となる。このキーで送受信を指定する。
        • 送信 : 上向き矢印、アップロード、Windows から stat システムへ
        • 受信 : 下向き矢印、ダウンロード、stat システムから Winodws へ
      10. 終了は「接続(F)」→「終了(X)」をクリックする。

      [Lesson 3-3] : ファイルの転送: Windows ===> stat システム(UNIX)

      • 転送元 : H:naikaku01.prn
      • 転送先 : 各自の stat システムのディレクトリ(正確にはホームディレクトリと呼ぶ)
      • 転送モードは「ASCII」を選択
      • 漢字コードは「EUC」を選択

    [参考5] テキスト形式のファイル(*.prn)の場合は、 「ASCII モード」で転送したが、Excel 形式のファイル(*.xls)の場合は、 「Binary モード」で転送しないとファイルが壊れてしまう。
    [参考6] 漢字を含まないファイルの転送であれば、 WS_FTP32 と言うソフトを使うこともできるが、 FFFTP を使えるのであれば敢えて両方を知っておく必要はないと思うので、 ここでは取り扱わない。詳しく知りたい場合は、NMC セミナー用テキストの「 WS_FTP32を使ったファイルの転送 」の項を参照のこと

  4. 転送されたデータの表示 : 確認のため。簡単な UNIX コマンド
    1. stat システムにログイン
      「スタート」→「プログラム(P)」→「stat システム」→「stat1」とクリックする。 (stat1 と 2, 3 はどれでも対等。混み具合いによって各自の判断で変更してよい)。
    2. 「login:」、「Password:」と表示されるので、 それぞれ個人のIDとパスワードを入力する。 なお、パスワードはセキュリティの都合上、画面には表示されない。
    3. UNIX の初歩的なコマンド
      • ファイル名一覧の表示 : ls
      • ファイルの内容の表示 : less [filename]
        [操作方法] スペースキーで次ページ、b で前ページ、q で終了
      • ログアウト : logout

      [Lesson 3-4] : 転送されたファイルの確認
      転送したファイルが実際に存在し、ファイル内容も正しいことを確認せよ。

      • ls
      • less naikaku01.prn
      • q で less を終了する

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

    1. 新しいプログラムを作る時にはまず現在のプログラムを消去
      Program Editorエリアのコマンド行で : [入力] clear
    2. プログラム : les0305.sas
       /* Lesson 3-5 */                               :
       /*    File Name = les0305.sas   10/16/03   */  :
                                                      :
      data naikaku;                                   : SAS 内でのデータ名の定義
        infile 'naikaku01.prn'                        : データの入っているファイル名の指定
          firstobs=2;                                 : データ 2行目から入っている
        input name $ sex $ goukei;                    : 読み込む変量名
                                                      :
      proc print data=naikaku;                        : データの表示
      run;                                            :
      proc means data=naikaku;                        : 平均、標準偏差、最大最小値の算出
      run;                                            :
      
    3. 出力結果 : les0305.lst : 平均の意味するもの。最大値、最小値との位置関係。
      • 画面の移動には BACKward, FORWard, TOP, BOTtom コマンドを使う。
                                    SAS システム                             1
                                             20:00 Wednesday, October 15, 2003
      
                          OBS    NAME        SEX    GOUKEI
      
                            1    Koizumi      M       5012
                            2    Katayama     M       7874
                            3    Moriyama     F      12606
                            4    Tanaka       F      74940
                            5    Shiokawa     M      56561
                            6    Touyama      F      24146
                            7    Sakaguch     M       2601
                            8    Takebe       M       5084
                            9    Hiranuma     M       4723
                           10    Ohogi        F      19554
                           11    Kawaguch     F      13550
                           12    Fukuda       M       8089
                           13    Murai        M       6492
                           14    Nakatani     M       1620
                           15    Omi          M       3278
      
                                    SAS システム                             2
                                             20:00 Wednesday, October 15, 2003
      
                          OBS      NAME      SEX    GOUKEI
      
                           16    Yanagisa     M      5375 
                           17    Takenaka     M      2808 
                           18    Ishihara     M      5932 
      
                                    SAS システム                             3
                                             20:00 Wednesday, October 15, 2003
      
             Analysis Variable : GOUKEI
      
              N          Mean       Std Dev       Minimum       Maximum
             ----------------------------------------------------------
             18      14458.06      19845.53       1620.00      74940.00
             ----------------------------------------------------------
      
    4. プログラムの保存 :
      Program Editorエリアのコマンド行でプログラムを recall 後 : [入力] file 'les0305.sas'

  6. デバッグ : 実行時にエラーが出なければ良いのだが...

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

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

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

  8. [演習(10月23日分)] : データの電子化と転送 : 次回までに
    1. 小泉内閣の資産公開資料のデータの電子化を完成させよ(未完成の場合)。
    2. 配布資料に基づいて初回の講義時に収集した皆さんのデータを電子化せよ。
    3. 各自で収集したデータを電子化せよ。
    [入力時の注意]
      [Lesson 3-1] で演習したように、データの電子化に際しては、 コード化を行う必要がある。 また、講義では漢字のデータは扱わないので、半角英数字で入力せよ。 ファイル名は各自で命名し、記録(記憶)しておくように。

  9. 次回は、... : 10月30日 14:45
    • 10月23日は体育祭で休み
    • プログラムの修正方法
    • 基礎統計量、グループ毎の統計量、...
    • データを収集して、電子化しておくこと
      • 初回に収集した皆さんのデータを解析してみよう
      • 興味あるデータの特性を明らかにしていこう

[DIR]講義のホームページへ戻ります