データとの対話 SASの使い方について

PC-SAS入門

 


0.SASとは?(主要なプロシジャ一覧)

 SASとはStatistical Analysis Systemのことで、統計解析を行う言語、パッケージ。

 簡単なプログラム方法をマスターすれば、難しい数式を覚えることなく簡単に統計分析を行うことができる。

 使える手法の例(括弧内は各分析を行うSASのプロシジャ名(太字は講義で紹介するプロシジャ)。

  • データの印刷、グラフの作成など
  • 統計分析
  •  注)簡単に計算してくれますが、その結果を解釈してはくれません。解釈するのは自分自身なのです。


    1.SASを使う前提

    1)使うデータとそのファイル

     「CMについてのアンケート」データファイルは、ensdat1.csv)。

     皆さんは残念ながら、ハードディスクを一時的にしか利用できないので、処理速度や容量の問題があるかも知れませんが、フロッピーディスクにデータを保存し、それを利用してもらいます。


    2)演習用データを保存するディレクトリの作成

     自分のフロッピーを入れる。

     「マイコンピューター」を開き、自分のフロッピー(A:)を選ぶ。

     「ファイル」「新しいフォルダの作成」

     「ensyu」と入力して、ディレクトリを作成する。

    注)Windowsの場合、入力モードを直接入力にしてください。


    3)データファイルのコピー

     「上記のensdat1.csvを、自分のフロッピーの\ensyuフォルダーに入れる。

     演習で使うSASのプログラムは演習用データ&プログラムについてを参照

    目次へ


    2.SASの使い方

    1)SASの構成

    SASには次の3つのウインドウがあります(この他にもあるが、よく使うのは3つ)。

      図表 SASのウインドウ

    Program editorウインドウ

    プログラムを書き込むウインドウ。

    LOGウインドウ

    計算過程でのSASからのメッセージなどが出力される。

    outputウインドウ

    計算結果が出力される。

    注)自分がどのウインドウにいるか見失った場合 「ウィンドウ」を選ぶと、各ウインドウに移動できる。


    2)プログラムの実行

     基本的には、次の手順で実行させる。

     Program editorウインドウにプログラムを書き込み/読み込み

     →必要ならば修正

     →実行


    (1)プログラムの読み込み

    Program editorに移動。

    「ファイル」「オープン」

    「f:hamaokadd」の中から「ensread1」を選ぶ。

    (注)自分で直接Program editorにプログラムを書き込むこともできる。


    (2)プログラムの実行

     Program editorウインドウにいることを確認。

    「ローカル」「サブミット」で実行される。

    (注)「サブミット」すると、Program editorウインドウはクリアされる。プログラムを修正した場合にはファイルの保存を忘れないように。 


    (3)実行結果のみかた

    ・logウインドウ

     sasシステムからのメッセージが出力される。

     自分のプログラムは黒字、sasからのメッセージのうち単なる報告は、警告、エラーは赤字で出力される。

    ・outputウインドウ

     うまく行けば(エラーが出なければ)計算結果が出力される。

    ・Program editorウインドウ

     クリアされている。

    (注)連続して実行すると、各ウインドウには前の出力に続けて結果が出力される。

       まめに「編集」 「テキスト消去」を実行しましょう。

    目次へ


    参考)

  • ウインドウの出力はカット、コピーなどできるので、そのままワープロなどに貼り付けて、レポートを作成することができる。
  • 各ウインドウの出力を画面ではなく、ファイルに出力することもできる(プログラムensread1を参照)。

  • 参考)sas/insight

    sasデータセット形式になっていると、sas/insightで対話型の分析を行うことができます。

    「グローバル」 「対話式データ解析」で起動。

    「SAS/INSIGHTオープンウインドウ」

    sasが作ったデータセットが見える。

    ensdat1というデータセットを選ぶと、ワークシート形式で表示される。

    ただし、この状態ではすべての変数が間隔尺度となっている。

    名義尺度は名義尺度に変更しておくと、あとの分析が楽になる。

    sasが尺度に応じた適切な手法を選んでくれる。

    プロット、回帰分析、主成分分析までならば、 SAS/INSIGHTの中でできます。予備分析には大いに威力を発揮するでしょう。

    この講義では、これ以上紹介しません。

    目次へ


    3.SASプログラミング入門

    1)プログラムの構成(要素)


    2)文法

  • 変数名
  •  変数名は英数字で8文字以内。変数名の先頭の文字は英字(大文字、小文字は区別されない)。

     C言語のように変数を宣言しておく必要はない。

     ただし、文字列変数の場合には、読み込みのときに、その変数が文字変数であることを指定しておく必要がある。

     例 xという数値変数を読み込む場合。

       input x ;

     例 xという文字列変数を読み込む場合。

       input x $;

       →xの後に「スペース$」を入れておく。

  • ファイル名、変数名、コマンドなどの、大文字、小文字は区別しない
  • 一つの文はセミコロン「;」で区切る。
  • プロシジャ単位で実行される。
  • 「/*  */」はコメント文であり、実行されない。
  • オプションの指定方法
  •  プロシジャによって異なりますが、オプションの指定は次の二カ所で行います(斜体部)。

     詳細はプロシジャによって異なるのでマニュアルを参照。

     proc **** data=入力データセット名  out= 出力データセット名;

      varなど/計算やプロットのオプション;

  • 入力データセットの指定
  •  どのデータセットについて処理させるかdata=で指定することができる。指定しなければ、直近に作成されたデータセットを処理する(下の例はproc printの例だが、他のプロシジャでも同様)。

    例 データセットを指定した例。

    例2 データセットを指定しない例。

      data aaa;

      .....

      data bbb;

      .....

      proc print data=aaa;

      run;

    データセットaaa,bbbを作成した。

    data=aaaが指定されているので、aaaが印刷される。

    data aaa;

      .....

    data bbb;

      .....

      proc print ;

      run;

    dataで指定されていないので、直前に作成されたbbbが印刷される。

    目次へ


    4.SASコマンド

    講義で使うもののみ。

  • DATA データセット名
  •  指定された名前のデータセットを作成する。

     例)data kenssdt;

       kenssdtという一時データセットを作成。  

     例)data md.kenssdt;

       mdというsasデータ・ライブラリの下に、kenssdtという永久データセットを作成。

  • LIBNAME sasライブラリ名 Windowsのディレクトリ名;
  •  sasデータライブラリとWindowsのファイルとの関係を指定する。

       ・永久データセットについては、aaa.bbbbのようにデータセット名を指定する。

         「sasライブラリ名.データセット名」という形式になる。

          →(sasライブラリ名とデータセット名との間をピリオドで区切る)

        sasライブラリ名とWindowsのファイルとを対応づけるのが「LIBNAME」コマンド

          例)LIBNAME md "a:\mydata\";  

           mdで始まる永久データセットはa:\mydata\の下にあること(保存すること)を指定する。

       ・一時データセットの場合には、ライブラリ名の指定は不要。

  • INFILE Windowsファイル名 delimiter=デリミタの種類 ;
  •        例)INFILE 'a:\mydata\kendat.prn' delimiter=' ' ;

             a:\mydata\kendat.prnから読み込むことを指定。

             デリミタは「」=スペースである。

  • by 変数名

  • where 条件文

  • 目次へ


    5.主なプロシジャ(講義で紹介するもの。アルファベット順)

  • proc cluster data=入力データセット名 オプション;
  • プログラム例 プログラムからの出力例

    目次へ


  • proc chart data=入力データセット名;
  • プログラム例 プログラムからの出力例

    目次へ

  • proc corr data=入力データセット名 オプション;
  • プログラム例 プログラムからの出力例

    目次へ


  • proc factor data=入力データセット名 オプション;
  • プログラム例 プログラムからの出力例

    目次へ


  • proc fastclus data=入力データセット名 オプション;
  • プログラム例 プログラムからの出力例

    目次へ


  • proc freq data=入力データセット名;
    • table 行方向変数名 * 列方向の変数名 /(検定)オプション;

    プログラム例 プログラムからの出力例

    目次へ


  • proc glm data=入力データセット名;
  • プログラム例 プログラムからの出力例

    目次へ


  • proc means data=入力データセット名;
  • プログラム例 プログラムからの出力例

    目次へ

  • proc plot data=入力データセット名 ;
    • plot 変数名1*変数名2/オプション;
    • 変数名1*変数名2のグラフを作成する。
    • plot で集計する変数名を指定する。
    • 例)yを縦軸、xを横軸にした散布図を作成する。
        proc plot data=....;

        plot y * x;

        run;

      • 注)proc plot; proc chartはテキストキャラクタでグラフが出力される。

          proc gplot; proc gchartとするとグラフィックでグラフが出力される。

    プログラム例 プログラムからの出力例

    目次へ


  • proc print data=入力データセット名;
  • プログラム例 プログラムからの出力例

    目次へ


  • proc reg data=入力データセット名;
  • プログラム例1(残差分析なし) プログラムからの出力例

    プログラム例2(残差分析あり) プログラムからの出力例

    目次へ


  • proc tree data=入力データセット名 ;
  • プログラム例 プログラムからの出力例

    目次へ


  • proc ttest data=入力データセット名 オプション;
  •   class 分類変数名(2つの値しかとらない変数);

      var 変数名;

    目次へ


  • proc univariate data=入力データセット名 オプション;
  • プログラム例 プログラムからの出力例

    目次へ



    付録1 データの読み込みかた

     自分で用意するデータの形式としては次のようなものがあるでしょう。


    1)表計算ソフトで入力したデータ。

     自分で本などをみてそれをエクセルなどの表計算ソフトで入力したデータ。

     表計算ソフト独特の形式で保存されている(ファイル名*.xclなど)ので、直接SASで読み込むことはできない。

     →表計算ソフトから(自由書式の)テキストファイル形式に出力。それをSASで読み込む。


    2)自由書式のテキストファイル形式で入手する。

     データとデータが、「 スペース」や 「,」「タブという眼には見えない特殊文字」などで区切られているデータ(データの区切りに用いられる文字を「デリミタ」と呼ぶ)。

     例 ,で区切られている。→ 985,187,abc,899,156,89,3

       スペースで区切られている。→ 985 187 abc 899 156 89 3


     このデータならば簡単に読み込める。

     ファイル名を指定して、input 変数名......;run;とする。

    ----

    上のデータ例について、7つの変数をa〜fという変数で読み込む場合。

    input a b c $ d e f g;

    のようにinput文を書く。

    注意)変数が都道府県、人名のような「文字」の場合には、変数名の後にスペースを空けて「$」をつけておく。


    3)固定書式のテキストファイル形式でデータを入手する。

     データとデータとの間に区切り記号がない。

     →データが記録される桁数が固定されている。

    例 上と同じデータ

       985187abc899156893

       3 3 3 3 3 2 1←各変数の桁数。

     各変数の記録されている桁の位置を指定する。

     →変数名のあとに、「桁の開始-終了位置」を指定する。

    例)input a 1-3 b 4-6 c $ 7-9 d 10-12 e 13-15 f 16-17 g 18-18;

    注)フォーマット入力という指定もある。SASマニュアル参照。

    →SASで読み込むときは、どの変数が、どの桁に記録されているかを指定することが必要。

    目次へ


    付録2 表計算ソフトからのデータの読み込みかた

     エクセル、ロータスなどの表計算ソフトで入力したデータをSASで読み込むことができます。

     ただし、表計算ソフト独特の形式のファイル(*.xclなど)を直接読み込むことはできないので、表計算ソフトで入力したファイルをテキスト形式のファイルに出力してから読み込みます。

    (演習用に提供しているデータもそうやって入力したものです。)

    手順は次のようになります。

       表計算ソフトで入力

      →入力したものをテキスト形式で保存。

      →読み込み用のSASプログラムを用意。

      →読み込みプログラムをサブミット。

      →出力結果を見て確認。


     以下ではエクセルを例にしますが、ロータスでも同様にできるはずです。

    a:ドライブの\mydataというフォルダにkendatというデータをエクセルで作成する。

     よって、次の二つの方法のどちらかで対応して下さい。

      (1)2.1項のcardsコマンドを使うか、

      (2)以下の方法で、文字変数を除いて数字データだけとする(データを除くのだから、変数名も除いて下さい)。

    -----------

    フォルダを作成しておくこと

      データの例

      県番号 県名   人口(1000人)  スーパー売上高(100万円/月)

       1   茨城   2894      42727

       2   栃木   1951      28671

       3   群馬   .      26672

       4   埼玉   6465      118785

       5   千葉   5614      93619

       6   東京   11634     174255

       7   神奈川  8002      144756

       

        注)人口:住民基本台帳人口、92年3月末

          スーパー売上高:商業界「日本スーパーマーケット名鑑91年」

          群馬の人口は入手可能だが練習のため、欠損「.」とする。    

      


    1)表計算ソフトなどで上のデータを次のように入力する。

    変数名は適当に自分の好きなようにつけてよいが、ここでは次のように。

      ------------

      県番号 県名   人口(1000人)  スーパー売上高(100万円/月)

      kenno kenname  popltn      suprsal

      1    茨城   2894      42727

      2    略

      ------------

    データを入力。

    欠損はピリオド「.」を入力。

    入力したら保存する(自分のフロッピーに)。


    2)csv形式で保存

     SASでデータを読み込むためには、csv形式に保存しなければならない。

    注)次の条件を満たしておくことが必要[大橋ら(1994),p.28]。

     各データは「,」で分離されていること。

     必要な小数点はデータ内に含まれていること。

     データの欠損値はピリオド「.」としておくこと。

    注)自由書式では、文字データは半角8文字(8バイト)=全角4文字までしか読み込めません。

     より長い全角文字列を読みたい場合には、固定書式としてください。

    →エクセルで新しいワークシートを開き、上のデータのうち、データの部分のみ(変数名の部分は含まない)をコピーしてcsv形式で保存する。

     注)保存のとき「ファイル形式」でcsv(コンマ区切り)を選ぶとcsv形式で保存される。

     →保存するファイル名はkendat.csvとする(コンマ区切りを指定するとcsvは自動的に付加される?)。


    3)sasによる読み込み&永久データセットの作成

     次のsasプログラムをsasのprogram editorに入力(この画面からコピーできるはず)。

     サブミットしてみる(斜線は自分たちのデータによって変更が必要な部分)。

     

      LIBNAME md "a:\mydata\";
        /*a:\mydata\の下にkenssdtという名前の永久データセットを作成する。*/

      DATA md.kenssdt;

      INFILE 'a:\mydata\kendat.csv' lrecl=100 delimiter=',' ;

        /*lrecl=100 でデータの横幅を大きめに指定しておく(この場合は100桁)。
      • delimiter=でデリミタ(データの区切のための文字)を指定する。この場合はコンマ*/

      input kenno kenname $ popltn suprsal;

      /*県名は文字変数なので、変数名の後に$をつける*/

      proc means data=md.kenssdt;

      /*入力ミスがないか確認のため記述統計を算出。

        変数名を指定していないのでデータセットに含まれる

        すべての変数(文字変数を除く)について計算される。*/

      proc print data=md.kenssdt;

      /*入力ミスがないか確認のためデータを印刷。

        変数名を指定していないのでデータセットに含まれる

        すべての変数が印刷される。*/

      run;

    注)漢字データの読み込みがうまく行かない場合は、文字データを漢字ではなくローマ字にしてみる(例 東京→tokyoなど)。

    ローマ字ならば読み込める場合には、double-byte character sets (DBCS)オプションがインストールされていないと考えられます。→システムの管理者に相談して下さい。

    横に非常に長いデータの場合にはlrecl=の指定を大きめにしておく。

    それでも読めない場合には下のカードで読み込んでください。

     

    目次へ


    付録2.1 ファイルからではなくcardsコマンドでSASプログラム中にデータを書き込む場合。

     sasのcardsコマンドを使ってデータをプログラムの中に書き込むこんで、それを読み込むことができます。

    下の例を参照(自分のフロッピーに保存するにはどうすればよいかは自分で考えてみて下さい)

    目次へ


    a-2具体例


    付録3 フロッピーを忘れた場合

     一時的にデータセットを作成して分析するプログラムも用意してあります。

      「f:hamaokadd]の中の「runable」というディレクトリの下に入っているプログラムを利用して下さい(プログラム名は同じ)。

     ただし、CMデータについての永久データセットが作成されていないので、sasを起動したら、まずensread1を実行して、永久データセットを作成してください。

     意識しなくても、実行してエラーがなければ、自分の「saswork」の下に、このデータセットが作成されます。

     この場合、フォルダSAS611の下の「saswork」というフォルダに、一時的に作成されたデータが格納される。

     sasを終了したら、これらのファイルは消去される。

    目次へ


    付録4 ダミー変数の作り方

     ノンメトリックな変数を回帰分析の説明変数とする場合には、それをダミー変数に変換することが必要です。

     マルチプルアンサー(○はいくつでも)の名目尺度の場合には、その選択肢が選ばれたときに1、そうでないときに0となるようにコード化されることが多いので、それをそのままダミー変数として使うことができます。

     これに対して、シングルアンサー(○はひとつだけ)の場合には、1.男性、2.女性の1、2という数字を0、1のダミー変数に変換する必要があります。

     選択肢がn個ある場合にはn-1個のダミー変数を定義する必要があります(n個定義してしまうと、行列がランク落ちしてしまう)。

    詳しくはプログラムを参照して下さい

     


    目次へ