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

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

 前回は 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/les0101.sas

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

      • [注意] データ名や変量名は 32文字以内の英数字(かつては8文字以内)で 判り易い/解り易い名前を付けること。以下の例で言えば、 データ名とは「kenshin」のことであり、 変量名とは「name, shintyou, taijyuu」のことである。
       /* Lesson 1-1 */                              : コメント、実行に無関係
       /*    File Name = les0101.sas  12/14/17   */  : 後々の記録のためのメモ
                                                     : 見易さのための空行
      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. 出力結果 : RESULTSタグ : 計算結果(出力): PDFファイル
                                        Thursday, December 21, 2017 11:07:08 AM  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  
      
                                        Thursday, December 21, 2017 11:07:08 AM  2
      
      The MEANS Procedure
      
      Variable    N            Mean         Std Dev         Minimum         Maximum
      -----------------------------------------------------------------------------
      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
        • 各変量ごとのサンプル数、平均、標準偏差、最小値、最大値
        • 小サンプル時の注意 : 各統計量に意味があるか?
      3. 有効桁数に注意せよ : どこまでが「意味ある桁」か?
        [重要な注意] 統計ソフトは単なる道具。使いこなすのは各自。
        [例1] 四捨五入の数値で考えてみる : 精度(正確さ)が異なることに注意
            67.8 <=== 67.75〜67.84
            68  <=== 67.5 〜68.4
        [例2] 日本の観測史上の 最高気温は、2007(平成19)年8月16日に熊谷市と多治見市で観測された40.9度であり、 最低気温は、1902(明治35)年1月25日に北海道旭川市の-41度であった。===> -41.0度
        [例3] 2001年のイチロー選手の打率は3割5分であった。 2006年は3割3分1厘であった。===> 3割5分0厘

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

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

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

  3. データをファイルから読み込んで使うには? 作業の流れ ===> プログラムとデータの分離
     データが大量になったら、data部(cardsの下側)に追加すれば良いのだが、限界がある。
    1. データを電子化する : Excelで ===> 第4節
    2. データファイルをSASに転送する ===> 第5節
    3. データをファイルから読み込むように SAS プログラムを記述する ===> 第6節
    4. 便利なコマンド ===> 第7節
    5. レポートを作成するには ===> 次回

  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文字(半角英数字)がベター [例] : Dragons.csv, Prefecture.csv
    5. Excel の終了
    6. データのバックアップ

  5. データの転送
     SASを起動後、Navigation Pane(画面左側)で転送したいディレクトリを表示させ 右クリックで「Upload Files...」を選択し、Choose Filesに対して手元のPCのファイル( Dragons.csv, Prefecture.csv 等)を指定する(複数を指定することも可能)。

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

    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 [utf-8], LF [lf]
      • Mac: UTF-8 [utf-8], CR [cr]
        • CR=Carriage Return, 本来の意味は「カーソルを左端に戻す」
        • LF=Line Feed, 本来の意味は「改行」

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

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

  8. サンプルプログラムと出力

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