SASプログラムの構造とデバッグ、データ転送、プログラムとデータの分離

統計モデル解析特論I/II : 第10回 (12/18/18)

 前回は SAS を使うための環境整備(アクセス、ログイン)や簡単な操作方法を中心に説明を行った。 今回は、SASプログラムについてその構成(構造)を解説すると共に、 データをファイルから読み込んで実行するための諸方法(プログラムとデータの分離)も紹介する。
  1. [おさらい] SAS OnDemand for Academics へのアクセス(ODAとも呼ぶらしい)
    1. SAS OnDemand for Academics Control Center (odamid.oda.sas.com/SASODAControlCenter) にアクセスする。
    2. ID とパスワードでログインする。
    3. 左側にファイル群(ナビゲーションペイン, Navigation Paneと呼ぶ)、右側にプログラム等(作業領域, Work Areaと呼ぶ)が表示される。

  2. [おさらい] プログラムの構成とその出力結果 : 前回 の演習内容
    1. プログラムの読み込み :
        ログイン後、画面左側のエリア(Navigation Pane)のディレクトリ(Kougi)を指定して、目的のSAS プログラム名をクリック。もしくは、前回ログアウトした状態が画面に残ったまま。
        [例] Kougi/les0901.sas

    2. プログラム : [コードタグ] : les0901.sas
      • はじめてのプログラム : プログラムは左側のみ。右側のコロン以降は説明用。
      • 3つのパート : コメント部、データの定義(data部)、緒処理の実行(proc部)
      • コメントは後々のために入れる習慣を付けよう
      • ブランク(段下げ)や空行は無視されるが見易さのために入れよう
      • プログラムの各行はセミコロン(;)で一つとカウントされる(改行は見易さのため)
      • 基本的には procコマンド(procedure)ごとに出力が得られる

      • [注意] データ名や変量名は 32文字以内の英数字(かつては8文字以内)で 判り易い/解り易い名前を付けること。以下の例で言えば、 データ名とは「kenshin」のことであり、 変量名とは「name, shintyou, taijyuu」のことである。
       /* Lesson 9-1 */                              : コメント、実行に無関係
       /*    File Name = les0901.sas  12/04/18   */  : 後々の記録のためのメモ
                                                     : 見易さのための空行
      data kenshin;                                  : データ名の定義
        input name $ shintyou taijyuu;               : 読み込む変量名、型($は文字型を示す)
      cards;                                         : データの始まりを示す
      Ogata      181  80                             : Case 1
      Takahashi  180  87                             : Case 2
      Ramirez    180 105                             : Case 3
      Kanemoto   180  86                             : Case 4
      Ogawa      186  89                             : Case 5
      Mori       182  85                             : Case 6
      ;                                              : データの終りを示す
      proc print data=kenshin;                       : 読み込んだデータの表示
      run;                                           : 上記の実行
      proc means data=kenshin;                       : 平均値等の算出
      run;                                           : 上記の実行
      
    3. 実行してみよう
      画面左上の「駆け足(Run)」アイコンをクリックする。

    4. 出力結果 : [結果タグ] : 計算結果(出力): PDFファイル
                                     2018年12月 4日 火曜日 13時55分22秒   1
      Obs    name        shintyou    taijyuu
      
       1     Ogata          181         80  
       2     Takahash       180         87  
       3     Ramirez        180        105  
       4     Kanemoto       180         86  
       5     Ogawa          186         89  
       6     Mori           182         85  
      
                                     2018年12月 4日 火曜日 13時55分22秒   2
      MEANS プロシジャ
      
      変数      N          平均    標準偏差       最小値       最大値
      -----------------------------------------------------------------------------
      shintyou    6     181.5000000       2.3452079     180.0000000     186.0000000
      taijyuu     6      88.6666667       8.5479042      80.0000000     105.0000000
      -----------------------------------------------------------------------------
      
    5. 計算結果 :
      1. 読み込んだデータの表示 : proc print
        • 縦方向にケース、横方向に変量
        • 左端にケース番号(OBS, Observation)
        • 入力が期待通りかを確認 : 数値のずれ、異常値、...
      2. 平均値等の算出 : proc means
        • 各変量ごとのサンプル数、平均、標準偏差、最小値、最大値
        • 小サンプル時の注意 : 各統計量に意味があるか?

    6. デバッグ : 実行時にエラーが出なければ良いのだが...
      • [結果タグ]に期待した結果が表示されているのなら正常だろう
      • エラーがあれば [ログタグ](作業状況, エラーの有無等, PDFファイル)に表示される
      • 綴りミスはある程度修正されるが、致命的なミスの時は実行が中断される
        1. 画面が三種類ある : [コードタグ], [ログタグ], [結果タグ]
          必要に応じて各タグ間を行き来する。
          1. [コードタグ] : プログラムの作成
          2. [ログタグ] : 実行過程の記録(ログ)
          3. [結果タグ] : 計算結果、出力
        2. プログラムのエラー個所を [ログタグ]で確認
        3. [コードタグ]に移って該当個所を修正
        4. 再実行しエラーがなくなるまで修正を繰り返す
      • エラーの例 : [ログタグ]に実行結果が表示される
        1. セミコロン忘れ
        2. コメントの終了ミス : /* ... */
        3. つづりミス : plint, ran, ...
        4. 変量名の順や個数、タイプ($ マークの位置)
        5. データファイルの内容が記述(or 予想)と異なる : 出力で確認
        6. ...

    7. 入力したものを有効活用しよう : 修正したら。完成したら。
      • プログラムの保存 : 自分のホームディレクトリに判りやすいファイル名で保存。
         [コードタグ]に移動後、画面左上の「フロッピーディスク(プログラムの保存, Save program)」アイコンをクリック。 ただし、これは上書きになるので、ファイル名を変更したい場合は、 画面左上の「フロッピーディスクに鉛筆(名前を付けて保存, Save as)」アイコンをクリック。
         [例] 'les0901.sas'
        • 注意 : 既に同名のファイルが存在する場合は警告が発せられる。 「Replace(上書き)」か「Cancel(中止)」の何れかを選ぶ。
      • 計算結果の保存 :
         [結果タグ]に移動後、画面左上のHTMLアイコン(HTMLファイル形式で結果をダウンロード, Download results as an HTML file)やPDFアイコン(PDFファイル形式で結果をダウンロード, Download results as a PDF file)をクリック。 もしくは、プリンタアイコン(結果の印刷)をクリックして指定のプリンタに印刷しても良い。
         [例] : les0901-results.html (HTML形式で保存)
         [例] : les0901-results.pdf (PDF形式で保存)
         [例] : les0901-output.pdf ([結果タグ]の出力印刷をPDF形式で保存)

    8. [利用のまとめ] SAS を使う上での基本
      • 3つのタグ : それぞれに目的や使い方がある
      • エラーがあれば [ログタグ]で確認する
      • 保存と読み出し : プログラムの有効利用

  3. データをファイルから読み込んで使うには? 作業の流れ ===> プログラムとデータの分離
     データが大量になったら、data部(cardsの下側)に追加すれば良いのだが、限界がある。
    1. データを電子化する : Excelで ===> 第4節
    2. データファイルをSASに転送する(アップロード) ===> 第5節
    3. データをファイルから読み込むように SAS プログラムを記述する ===> 第6節
    4. 便利なコマンド ===> 第7節
    5. これらを反映させたサンプルプログラム ===> 第8節
    6. 分析結果のダウンロード ===> 次回
    7. 幾つかの統計手法用のプロシジャー ===> 次回
    8. レポートを作成するには ===> 次回

  4. データの電子化
     取り扱うデータが長方形(表形式)をしているので、表計算ソフトと呼ばれるアプリケーションを利用するのが便利である。 ここでは、Microsoft Excel を例に実際に電子化の手順を説明する。 なお、Excel のより詳しい使い方については、 市販の書籍を参考にしてほしい。
     なお、データは縦方向にケース(サンプル)が、横方向に変量が、 並んでいるとして、説明を進める。
     また、csv ファイルは Comma Separated Value の略で、 項目がカンマで区切られたテキストファイルであり、 異なったシステム間でのデータの交換に使われる。 今回はExcel の独自ファイルをcsv 形式に保存して、 それをSASに読み込ませることを考える。
    1. Excel の起動
    2. データの入力
       各自、実験データや趣味のデータを持ち寄っていただければと思っている。 もしくは、以下のようなサイトからデータをもらってくることもできる。
    3. データの保存(その1: Excelの標準形式で(*.xls, *.xlsx))
    4. データの保存(その2: csv形式で保存(*.csv)) ===> これをSASで利用
      • [ファイル]-[名前を付けて保存]と進んで、保存先を指定後、 ウインドウの下の方にある「ファイルの種類(T)」に対して 「CSV(カンマ区切り)(*.csv))」を指定する。
      • ファイル名はANK文字(半角英数字)がベター [例] : Dragons18.csv, Prefectures.csv
    5. Excel の終了
    6. データのバックアップ

  5. データの転送(アップロード)
     SASを起動後、Navigation Pane(画面左側)で転送したいディレクトリ([例] Kougi)を表示させ 右クリックで「ファイルのアップロード」を選択し、「ファイルの選択」に対して手元のPCのファイル( Dragons18.csv, Prefectures.csv 等)を指定する(複数を指定することも可能)。 同様の作業はNavigation Pane上部の「上矢印アイコン」でも指定することが可能である。

  6. ファイルから読み込むように SASプログラムを記述
     ファイルからデータを読み込むために、SASプログラムに手を加える。
    1. データの測定値の開始行を指定
      データの先頭に変数名の説明等が入っている場合、読み飛ばす必要がある。 以下の例では5行を読み飛ばし、6行目からがデータであることを指示している。
      [コマンド] : firstobs=6

    2. csvファイルを読み込むために
       csvファイルは項目がカンマで区切られた(Delimiter)テキストファイルであるので、 そのことを示す「dlm=','」を指定する。
       また、欠損値を含んだデータが連続した場合のcsvファイルに対しても 正常に読み込むために、「dsd missover」も追加しておく。詳しくは ここ を参照のこと。
      [コマンド] : dlm=',' dsd missover

    3. 文字コードと行末コードの指定(必要に応じて)
       Windows で作成したファイルは、文字コードがShift-JISで、 行末コードが「キャリッジリターン(CR)+改行(LF)」となっている。 しかし、SASでは文字コードのデフォルトが UTF-8、 行末コードが「キャリッジリターン(CR)」となっているので、 Windowsから転送したファイルを読み込む際にはこれらを指定する必要がある。
      [コマンド] : encoding=sjis termstr=crlf

      [参考] : テキスト・ファイルの行末コードを変更する

      • Windows: Shift-JIS [sjis], CR+LF [crlf]
      • UNIX: EUC [jeuc] or UTF-8 [utf8], LF [lf]
      • Mac: UTF-8 [utf8], CR [cr]

      • CR=Carriage Return, 本来の意味は「カーソルを左端に戻す」
      • LF=Line Feed, 本来の意味は「改行」

      [講義後加筆(12/10)] :

      1. 講義時に配付した資料では、漢字コードがUTF-8の場合、 オプションの指定文字列を「utf-8」と紹介しましたが、これは正確な説明では ありませんでした。「utf8」とするか「'utf-8'」(クォーテーションで囲む)と 指定すべきであることが判明しましたので、上記の説明部分を修正しました。 申し訳ありませんでした。
      2. Mac のExcel で csvファイルを作成した場合の漢字コードは UTF-8 の ようですが、行末コードが何になるかが調べても正確には判りませんでした。 ただ、1例だけを挙げると「CR+LF」になっていましたので、 常時「CR」ではない可能性があります。今後も調べてみますが、 現状で判っていることをお知らせしておきます。

    4. 文字データの読み込み時に便利なコマンド
       第2節で取り上げた les0901.sas の計算結果を見ても判るように、 inputコマンドにおいて、文字データ($ マークで指定)は 何も指定しない(デフォルト)と8文字しか読み込まないので、 長いデータ(以下の例の氏名等)はそのままでは後ろ側が切れてしまう。
       これに対処するために、文字列の長さを「 Name $24. 」と指定することができる(データ中最大の長さを指定する。 最後のピリオドを忘れないように)。 が、今度はデータ中の短い文字列を読んだ際に、その後ろまでもが 一つのデータであると誤認してしまい、うまく読み込めない。 このような場合は、区切り文字が出てくるまでを読み込むという指示を示す コロンを挿入して「 Name : $24. 」と指定する。
       csv ファイルを読み込む場合には頻繁に利用されるので、 覚えておくと重宝する。

  7. 今後のことを考えて2つの便利なコマンドを紹介しておく

  8. サンプルプログラムと出力: 次回に向けて

  9. 今後は...

  10. [練習問題] 上に挙げた 都道府県の基礎データ をファイルから読み込んで分析してみよ。

  11. 次回は、... : 01月08日 16:20
[DIR]講義のホームページへ戻ります