因子分析の演習とちょっとしたテクニック

統計処理 01 クラス : 第21回目(11/22/01)

4月から SAS の使い方を統計手法を中心に紹介してきたが、 目前のテーマに対して活用できるようになってきたであろうか? それぞれの手法を理解すると共にこれらを組み合わせることによって より多角的な知見が得られるようになると思う。
入力したデータをそのまま使うのであれば統計手法を使うだけで済むと思うが、 変量の四則演算の結果を調査対象にしたり、 データの一部を抽出して利用しようとすると、 何らかの指示を出さなければならない。 手っ取り早い方法としては、MS-Excel にデータを転送して、 目的の処理を実施後、再転送することによって実現することもできるが、 SAS 内でも同様のことを行うことが可能である。
今回は SAS を使うにあたって知っていると便利かもしれない データの変容(加工)テクニックを幾つか紹介する。 なお、 第15回 では、第4節で「変数変換」を、第5節で「if 文」を紹介したので、 これも併せて参考にすると良い。

  1. 因子分析の演習 : 先週の配布資料に基づく

  2. データの生成 : 乱数で(正規乱数) : 種(seed)の指定 [参考] : 乱数を発生する関数
    normal : 正親分布に従う疑似乱数を生成します。
    ranbin : 二項分布に従う乱数を生成します。
    rancau : コーシー乱数を生成します。
    ranexp : 指数乱数を生成します。
    rangam : ガンマ分布に従う乱数を生成します。
    rannor : 正規乱数を生威します。
    ranpoi : ポアソン分布に従う乱数を生成します。
    rantbl : 指定した確率重み関数から、乱数を生成します。
    rantri : 三角分布に従う乱数を生成します。
    ranuni : (0,1)の間の一様乱数を生成します。
    uniform : (0,1)の間の一様疑似乱数を生成します。

  3. 例題1

    1. プログラム : les2101.sas

       /* Lesson 21-1 */
       /*    File Name = les2101.sas   11/22/01   */
      
      options linesize=72; /* pagesize=20; */      : 出力サイズの指定
      
      data rei01;                                  : データセット名を rei01 とする
       do i=1 to 200;                              : 200回の繰り返し
         x=rannor(12345);                          : 正規乱数を発生させる
         output;                                   : データセットに追加する
       end;                                        : 繰り返しの終端
      run;                                         :
      
      proc print data=rei01(obs=10);               : 先頭 10ケースの表示
      run;                                         :
      
      proc means data=rei01;                       : 全データに対する平均の計算
      run;                                         :
      
      proc print data=rei01(firstobs=91 obs=110);  : 91番から 110番のデータの表示
      run;                                         :
      
      proc means data=rei01(firstobs=91 obs=110);  : 91番から 110番のデータについての平均
      run;                                         :
      
      data _null_;                                 : データセット名は付けない
        set rei01;                                 : 元となるデータセット名
        file "unsorted.dat";                       : 出力ファイル名
        put i 5. x 15.8;                           : 変量 i は小数点以上 5桁で
      run;                                         : 変量 x は小数点以上 15桁、以下 8桁で
      
      proc sort data=rei01;                        : 並べ替え
        by x;                                      : 変量 x について
      run;                                         :
      
      proc print data=rei01(obs=10);
      run;
      
      proc print data=rei01(firstobs=91 obs=110);
      run;
      
      proc means data=rei01(firstobs=91 obs=110);
      run;
      
      data _null_;
        set rei01;
        file "sorted.dat";
        put i 5. x 15.8;
      run;
      
    2. 出力結果 : les2101.lst unsorted.dat sorted.dat
      • 並べる前後での数値列を比較せよ
      • 乱数の種類を取り替えて計算させてみよ

  4. 例題2

    1. プログラム : les2102.sas

       /* Lesson 21-2 */
       /*    File Name = les2102.sas   11/22/01   */
      
      options linesize=72; /* pagesize=20; */
      
      data rei02;                           : データセット名を rei02 とする
        do i=1 to 100;                      :
          x=rannor(23456);                  : 上記とは別の種で乱数を発生させる
          x10=int(x*10);                    : 10倍して正数部分だけ利用
          output;                           :
        end;                                :
      run;                                  :
      
      title "Default";                      : 見出し(タイトル)を付ける : 「指定なし」
      proc chart data=rei02;                : オプションを指定しない場合のヒストグラム
        hbar x;                             : 変量 x について
      run;                                  :
      
      title "Ascending order";              : 「昇順」
      proc chart data=rei02;                : 
        hbar x / midpoints=-3 to 3 by .5;   : 変量 x について昇順で。0.5 刻み。
      run;                                  :
      
      title "Descending order";             : 「降順」
      proc chart data=rei02;                :
        hbar x / midpoints=3 to -3 by -.5;  : 変量 x について降順で。-0.5 刻み。
      run;                                  :
      
      title "Default";                      : 「指定なし」: x10 を昇順に表示
      proc freq data=rei02;                 : オプションを指定しない場合の度数分布表
        tables x10;                         : 変量 x10 について
      run;                                  :
      
      title "Freqency order";               : 「頻度降順」: 頻度の大きいものから
      proc freq data=rei02 order=freq;      :
        tables x10;                         : 変量 x10 についての頻度順に表示
      run;                                  :
      
      proc sort data=rei02;                 : 並べ替え
        by decending x10;                   : x10 について降順に並べる
      run;                                  :
      
      title "Descending order";             : 「数値降順」: x10 を降順に表示
      proc freq data=rei02 order=data;      : データの出現順で表示させるというオプション
        tables x10;                         :
      run;                                  : 
      
    2. 出力結果 : les2102.lst
      • どこをキーとした順で表示されているかを把握せよ
      • 乱数の種類を取り替えて計算させてみよ

  5. 行末がそろってないデータの読み込み : 一行文字数の指定

  6. 固定長データの読み込み : カラム位置の指定

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