主成分分析

統計解析 02 クラス : 第12回 (07/08/04)

 いくつか(p個)の変量の値を情報の損失をできるだけ少なくして、 少数変量(m個、m<p)の総合的指標(主成分)で代表させる方法として 主成分分析(Principal Component Analysis, PCA)がある。 いくつかのテストの成績を総合した総合的成績、 いろいろな症状を総合した総合的な重症度、 種々の財務指標に基づく企業の評価 等を求めたいといった場合に用いられる。
 p変量(p次元)の観測値をm個(m次元)の主成分に縮約させるという意味で、 次元を減少させる方法と言うこともでき、 多変量データを要約する一つの有力な方法である。
  1. 2変量の場合の主成分分析 : 理解を助けるため
    1. 定式化 : 配布資料 54ページ〜
      • 重み(係数) : a1、a2
      • 合成変量(線形結合) : z
      • よく代表するように、a1 と a2 を決める。
      • より広がって測定できる軸に沿うと情報量が多い。
      • 全測定値の分散を最大化する軸を決定する。

    2. 身長と体重の総合指標を求めよう : プログラム : les1201.sas

       /* Lesson 12-1 */
       /*    File Name = les1201.sas   07/08/04   */
      
      data gakusei;
        infile 'all04a.prn'
          firstobs=2;
        input sex $ shintyou taijyuu kyoui
              jitaku $ kodukai carryer $ tsuuwa;
      
      proc print data=gakusei(obs=10);
      run;
      
      proc plot data=gakusei;                        : 散布図
        plot shintyou*taijyuu;                       : 元の変量のプロット
      run;                                           :
      proc princomp cov data=gakusei out=outprin;    : 主成分分析(分散共分散行列)
        var shintyou taijyuu;                        : 2変量
      run;                                           :
      proc print data=outprin(obs=15);               : 結果の出力
      run;                                           :
      proc plot data=outprin;                        : 散布図
        plot prin2*prin1/vref=0 href=0;              : 主成分得点のプロット
      run;                                           :
      proc sort data=outprin;                        : 説明のためにソートしてみる
        by prin1;                                    : 第一主成分で
      run;                                           :
      proc print data=outprin;                       : 体重がややが効いていることの確認
      run;                                           :
      

    3. 出力結果 : les1201.lst
      • 身長と体重の散布図
      • 各変量の平均、標準偏差、分散共分散行列
      • 固有値、比率(寄与率)、累積寄与率 : 解釈に使う
      • 固有ベクトル(係数a1とa2) : 解釈に使う
      • 主成分得点 : 各個人の得点(z)、2つある
      • 第1軸と第2軸の主成分得点の散布図
                                    SAS システム                             2
                                                  23:20 Thursday, July 1, 2004
           プロット : SHINTYOU*TAIJYUU.  凡例: A = 1 OBS, B = 2 OBS, ...
                    (NOTE: 42 オブザベーションが欠損値です.)
          SHINTYOU |
               200 +
                   |
                   |                               B       A
               180 +                       A ADCDDDBEA B B      A     A
                   |                    AAEDKHTMGGCEDCB BA
                   |                  AEAGIFEDCBBEAA  AA A     A
               160 +                ADCEBHDDAABB
                   |           A   EB DCDA A   A
                   |             A AAA
               140 +
                   ---+-----------+-----------+-----------+-----------+--
                     20          40          60          80          100
                                           TAIJYUU
      
                                    SAS システム                             3
                                                  23:20 Thursday, July 1, 2004
                            Principal Component Analysis
           254 Observations
             2 Variables
                                 Simple Statistics
      
                                    SHINTYOU           TAIJYUU
      
                      Mean       168.6755906       58.73031496
                      StD          8.0222834        9.22268568
      
                                    SAS システム                             4
                                                  23:20 Thursday, July 1, 2004
                            Principal Component Analysis
      
                                 Covariance Matrix
      
                                      SHINTYOU           TAIJYUU
      
                    SHINTYOU       64.35703028       52.38386543
                    TAIJYUU        52.38386543       85.05793113
      
                           Total Variance = 149.41496141
      
                        Eigenvalues of the Covariance Matrix
      
                  Eigenvalue      Difference      Proportion      Cumulative
      
       PRIN1         128.104         106.793        0.857371         0.85737
       PRIN2          21.311            .           0.142629         1.00000
      
                                    SAS システム                             5
                                                  23:20 Thursday, July 1, 2004
                            Principal Component Analysis
      
                                    Eigenvectors
      
                                         PRIN1         PRIN2
      
                        SHINTYOU      0.634885      0.772606
                        TAIJYUU       0.772606      -.634885
      
                                    SAS システム                             6
                                                  23:20 Thursday, July 1, 2004
                S
                H      T               K  C
                I      A       J       O  A           T
                N      I    K  I       D  R           S        P         P
                T      J    Y  T       U  R           U        R         R
       O   S    Y      Y    O  A       K  Y           U        I         I
       B   E    O      U    U  K       A  E           W        N         N
       S   X    U      U    I  U       I  R           A        1         2
      
        1  F  145.0  38.0   .  J   10000                .  -31.0477  -5.13053
        2  F  148.0  42.0   .  J   50000                .  -26.0526  -5.35226
        3  F  148.0  43.0  80  J   50000  DoCoMo     4000  -25.2800  -5.98714
        4  F  148.9    .    .  J   60000                .     .        .     
        5  F  149.0  45.0   .  G   60000                .  -23.0999  -6.48431
        6  F  150.0  46.0  86      40000                .  -21.6924  -6.34659
        7  F  151.0  50.0   .  G   60000  J-PHONE       .  -17.9671  -8.11352
        8  F  151.7  41.5  80  J   35000                .  -24.0898  -2.17617
      
                                    SAS システム                             8
                                                  23:20 Thursday, July 1, 2004
              プロット : PRIN2*PRIN1.  凡例: A = 1 OBS, B = 2 OBS, ...
                 (NOTE: 42 オブザベーションが欠損値です.)
          PRIN2 |                            |
             10 +                            A  A  BA
                |                     AA  BB BABBAAACA  B
                |         A        BC ACAGCCFFCGGFC CD  A
              0 +-------------BBA-AACBAI-BDBFEEDFCACCBAE--A-----A---------
                |            AA CABCB ABCA   BB DDBADB A A
                |        A  AAAA AAA A A  ABBAAC  A BA  AABA
            -10 +                    A   A   |      AB            A
                |                            |
                |                            |       A
            -20 +                            |              A         A
                ---+------------+------------+------------+------------+--
                  -40          -20           0           20           40
                                           PRIN1
      
                                    SAS システム                             9
                                                  23:20 Thursday, July 1, 2004
                      S
                      H     T                K   C
                      I     A       J        O   A            T
                      N     I   K   I        D   R            S     P   P
                      T     J   Y   T        U   R            U     R   R
           O    S     Y     Y   O   A        K   Y            U     I   I
           B    E     O     U   U   K        A   E            W     N   N
           S    X     U     U   I   U        I   R            A     1   2
      
            1   F   148.9   .   .   J    60000                  .   .   .
            2   F   153.0   .   .   G   120000   DoCoMo       200   .   .
            3   F   155.0   .   .   J    20000                  .   .   .
      <中略>
      
                                    SAS システム                            43
                                                  23:20 Thursday, July 1, 2004
                  S
                  H      T               K  C
                  I      A       J       O  A         T
                  N      I    K  I       D  R         S      P         P
                  T      J    Y  T       U  R         U      R         R
         O   S    Y      Y    O  A       K  Y         U      I         I
         B   E    O      U    U  K       A  E         W      N         N
         S   X    U      U    I  U       I  R         A      1         2
      
        273  M  182.0  64.0   .  G       0             .  12.5309    6.9489
        274  M  165.0  78.0   .  G       0          2098  12.5543  -15.0738
        275  M  170.0  74.0  90  J       0             .  12.6383   -8.6713
        276  M  178.0  68.0   .  J  100000  DoCoMo  4000  13.0817    1.3189
        277  M  175.0  74.0   .  J       0             .  15.8127   -4.8082
        278  M  180.0  70.0  94  G   70000  au      5000  15.8967    1.5944
        279  M  180.0  70.0   .  J   40000  au      4000  15.8967    1.5944
        280  M  180.0  70.0   .          .             .  15.8967    1.5944
        281  M  180.0  70.0   .  J   40000  DoCoMo  6500  15.8967    1.5944
        282  M  178.7  71.2  95          0             .  15.9985   -0.1719
        283  M  173.5  76.5   .  G  100000             .  16.7919   -7.5543
        284  M  184.0  68.0  85      30000             .  16.8911    5.9545
        285  M  182.0  70.0  90  G  100000             .  17.1665    3.1396
        286  M  185.0  68.0  93  J       0             .  17.5259    6.7272
        287  M  175.0  77.0  95  G  130000             .  18.1305   -6.7129
        288  M  179.1  74.2   .          0  au      4000  18.5703   -1.7675
        289  M  176.5  78.0  96  J   10000             .  19.8555   -6.1889
        290  M  177.0  78.0   .  J   40000             .  20.1729   -5.8026
        291  M  181.5  74.5   .  G  120000  au      3000  20.3258   -0.1037
        292  M  178.0  78.0 110  G   50000             .  20.8078   -5.0299
        293  M  169.3  88.5  94  J       0             .  23.3967  -18.4179
        294  M  186.0  82.0   .  J       0             .  28.9773   -1.3886
        295  M  182.0  90.0 100  J   40000             .  32.6186   -9.5581
        296  M  178.0 100.0 112  G   60000             .  37.8051  -18.9974
      

    4. 解釈方法
      • 寄与率 : その軸がどの程度説明力を持っているか : 第1軸だけで十分(85.7%)。第2軸に含まれる説明力は小さい(14.3%)。
      • 固有ベクトル : その軸の特徴を示している : 身長と体重の重みはほぼ同等だが、体重がやや大きめに効いている(第1軸)
      • 主成分得点と散布図 : 各個人がどこに付置されているか
      • 第1軸 : 全体的な体格の指標。身長と体重を足したような指標。

  2. 3変量以上の主成分分析
    1. 定式化 : 資料 71ページ〜
      • 2変量の拡張
      • 合成変量(線形結合) : z
      • 合成変量の分散を最大化する軸を決定する。

    2. 身長、体重、胸囲での総合指標を求めてみよう : プログラム : les1202.sas

       /* Lesson 12-2 */
       /*    File Name = les1202.sas   07/08/04   */
      
      data gakusei;
        infile 'all04a.prn'
          firstobs=2;
        input sex $ shintyou taijyuu kyoui
              jitaku $ kodukai carryer $ tsuuwa;
      
      proc print data=gakusei(obs=10);
      run;
      
      proc princomp cov data=gakusei out=outprin;    : 主成分分析(分散共分散行列)
        var shintyou taijyuu kyoui;                  : 3変量
      run;                                           :
      proc print data=outprin(obs=15);               : 結果の出力
      run;                                           :
      proc plot data=outprin;                        : 散布図
        plot prin2*prin1/vref=0 href=0;              : 主成分得点のプロット
        plot prin3*prin2/vref=0 href=0;              :
        plot prin3*prin1/vref=0 href=0;              :
      run;                                           :
      

    3. 出力結果 : les1202.lst
      • 各変量の平均、標準偏差、共分散行列
      • 固有値、比率(寄与率)、累積寄与率
      • 固有ベクトル
      • 主成分得点
      • 第1軸〜第3軸の散布図

                                    SAS システム                             3
                                                  23:20 Thursday, July 1, 2004
                            Principal Component Analysis
            93 Observations
             3 Variables
                                 Simple Statistics
      
                           SHINTYOU           TAIJYUU             KYOUI
      
             Mean       167.7602151       59.19569892       86.72043011
             StD          8.6631170       10.96744108        7.89794358
      
                                    SAS システム                             4
                                                  23:20 Thursday, July 1, 2004
                            Principal Component Analysis
      
                                 Covariance Matrix
      
                             SHINTYOU           TAIJYUU             KYOUI
      
           SHINTYOU        75.0495956        67.9609140        27.0767999
           TAIJYUU         67.9609140       120.2847639        58.5074801
           KYOUI           27.0767999        58.5074801        62.3775129
      
                                    SAS システム                             5
                                                  23:20 Thursday, July 1, 2004
                            Principal Component Analysis
      
                           Total Variance = 257.71187237
      
                        Eigenvalues of the Covariance Matrix
      
                  Eigenvalue      Difference      Proportion      Cumulative
      
       PRIN1         198.838         157.733        0.771550         0.77155
       PRIN2          41.104          23.334        0.159497         0.93105
       PRIN3          17.770            .           0.068953         1.00000
      
                                    SAS システム                             6
                                                  23:20 Thursday, July 1, 2004
                            Principal Component Analysis
      
                                    Eigenvectors
      
                                  PRIN1         PRIN2         PRIN3
      
                 SHINTYOU      0.505436      -.687310      0.521669
                 TAIJYUU       0.752185      0.054727      -.656675
                 KYOUI         0.422790      0.724299      0.544646
      
                                    SAS システム                             7
                                                  23:20 Thursday, July 1, 2004
               S
               H     T            K C
               I     A     J      O A          T
               N     I   K I      D R          S       P       P        P
               T     J   Y T      U R          U       R       R        R
        O  S   Y     Y   O A      K Y          U       I       I        I
        B  E   O     U   U K      A E          W       N       N        N
        S  X   U     U   I U      I R          A       1       2        3
      
         1 F 145.0 38.0  . J  10000              .    .       .       .     
         2 F 148.0 42.0  . J  50000              .    .       .       .     
         3 F 148.0 43.0 80 J  50000 DoCoMo    4000 -25.0110  7.8275 -3.33323
         4 F 148.9   .   . J  60000              .    .       .       .     
         5 F 149.0 45.0  . G  60000              .    .       .       .     
         6 F 150.0 46.0 86    40000              . -19.2069 10.9628 -0.99204
         7 F 151.0 50.0  . G  60000 J-PHONE      .    .       .       .     
         8 F 151.7 41.5 80 J  35000              . -24.2692  5.2023 -0.41804
         9 F 152.0 35.0 77 J  60000 DoCoMo    2000 -30.2751  2.4675  2.37292
        10 F 152.0 43.0  . J  20000 au        3500    .       .       .     
        11 F 153.0 41.0  . J 125000 No           .    .       .       .     
        12 F 153.0 42.0  . G      0 Vodafone  1000    .       .       .     
        13 F 153.0 46.5 87 G  10000              . -16.8917  9.6525  0.78927
        14 F 153.0 50.0  . G  70000 DoCoMo   10000    .       .       .     
        15 F 153.0 55.0 78 J  30000              . -14.3032  3.5990 -9.69428
      
                                    SAS システム                             9
                                                  23:20 Thursday, July 1, 2004
              プロット : PRIN2*PRIN1.  凡例: A = 1 OBS, B = 2 OBS, ...
             (NOTE: 203 オブザベーションが欠損値です.)
      PRIN2 |                          |
         20 +                          |
            |              A         A |  A   A         A          A
            |           B  A BCABA  AA | A AB    A     A
          0 +--------A---A---BABCCBAD--D-BF-ACBB-AAAA--------A----------------
            |             A   A    A   BAAB BAC  AA
            |                     A    |A A    A
        -20 +                A         |
            |                          |
            |                          |
        -40 +                          |
            ---+-----------+-----------+-----------+-----------+-----------+--
              -40         -20          0          20          40          60
                                           PRIN1
      
                                    SAS システム                            10
                                                  23:20 Thursday, July 1, 2004
              プロット : PRIN3*PRIN2.  凡例: A = 1 OBS, B = 2 OBS, ...
             (NOTE: 203 オブザベーションが欠損値です.)
      PRIN3 |                                      |
         10 +                                      |
            |                       A   A  AB     A| A          A A
            |                     A  A  A AA   AEAE|C AA ACC       A
          0 +--------------------------A-A--B--A--CDB-BB-CAAA--AA-------------
            |                           AA     AA CC C  AAA A
            |                     A          B A   | B          A  A
        -10 +                                      |   A
            |           A                          |      A
            |                                      |
        -20 +                                      |
            ---+-----------+-----------+-----------+-----------+-----------+--
              -30         -20         -10          0          10          20
                                           PRIN2
      
                                    SAS システム                            11
                                                  23:20 Thursday, July 1, 2004
              プロット : PRIN3*PRIN1.  凡例: A = 1 OBS, B = 2 OBS, ...
             (NOTE: 203 オブザベーションが欠損値です.)
      PRIN3 |                          |
         10 +                          |
            |                  A       AA   A C   A     A
            |        A     A  AACAA C  A CE BAAA CA
          0 +-----------A--A-CBAACAAA--CA-DAAA--------------------------------
            |           AA   AA A  A A | AA ABBA   AA
            |             A       A AA A       A             A     A
        -10 +                 A        |
            |                A         |               A
            |                          |
        -20 +                          |
            ---+-----------+-----------+-----------+-----------+-----------+--
              -40         -20          0          20          40          60
                                           PRIN1
      

    4. 解釈方法
      • 寄与率 : 2軸まで取れば十分のようだ(93.1%)。
      • 第1軸 : 全体的な体格の因子。特に体重が効いている。
      • 第2軸 : 太さの因子(?)。胸囲が正で身長が負。

      • 第3軸 : 華奢さの因子(?)。無視しても良い軸であるが。(6.9%)。

  3. 相関行列を使う理由

    1. 相関行列を用いて体格の総合指標を求めてみよう : プログラム : les1203.sas

       /* Lesson 12-3 */
       /*    File Name = les1203.sas   07/08/04   */
      
      data gakusei;
        infile 'all04a.prn'
          firstobs=2;
        input sex $ shintyou taijyuu kyoui
              jitaku $ kodukai carryer $ tsuuwa;
      
      proc print data=gakusei(obs=10);
      
      run;                                          :
      proc princomp data=gakusei out=outprin;       : 相関係数を使って
        var shintyou taijyuu kyoui;                 :
      run;                                          :
      proc print data=outprin(obs=15);
      run;
      proc plot data=outprin;
        plot prin2*prin1/vref=0 href=0;
        plot prin3*prin2/vref=0 href=0;
        plot prin3*prin1/vref=0 href=0;
      run;
      

    2. 出力結果 : les1203.lst
      • 各変量の平均、標準偏差、相関行列
      • 固有値、比率(寄与率)、累積寄与率
      • 固有ベクトル
      • 主成分得点
      • 第1軸〜第3軸の散布図

      
                                    SAS システム                             3
                                                  23:20 Thursday, July 1, 2004
                            Principal Component Analysis
            93 Observations
             3 Variables
                                 Simple Statistics
      
                           SHINTYOU           TAIJYUU             KYOUI
      
             Mean       167.7602151       59.19569892       86.72043011
             StD          8.6631170       10.96744108        7.89794358
      
                                    SAS システム                             4
                                                  23:20 Thursday, July 1, 2004
                            Principal Component Analysis
      
                                 Correlation Matrix
      
                               SHINTYOU       TAIJYUU         KYOUI
      
                 SHINTYOU        1.0000        0.7153        0.3957
                 TAIJYUU         0.7153        1.0000        0.6754
                 KYOUI           0.3957        0.6754        1.0000
      
                                    SAS システム                             5
                                                  23:20 Thursday, July 1, 2004
                            Principal Component Analysis
      
                       Eigenvalues of the Correlation Matrix
      
                  Eigenvalue      Difference      Proportion      Cumulative
      
       PRIN1         2.20118         1.59596        0.733725         0.73373
       PRIN2         0.60522         0.41161        0.201739         0.93546
       PRIN3         0.19361          .             0.064535         1.00000
      
                                    SAS システム                             6
                                                  23:20 Thursday, July 1, 2004
                            Principal Component Analysis
      
                                    Eigenvectors
      
                                  PRIN1         PRIN2         PRIN3
      
                 SHINTYOU      0.554911      -.676206      0.484582
                 TAIJYUU       0.633593      -.033949      -.772921
                 KYOUI         0.539105      0.735930      0.409601
      

    3. 解釈方法
      • 寄与率 : 2軸まで取れば十分のようだ(93.5%)。
      • 第1軸 : 全体的な体格の因子。
      • 第2軸 : 太さの因子。
      • 分散共分散行列を使ったときよりも 第1軸の固有ベクトル同士が近い値になった。 しかし、軸の解釈に違いはない。 その理由はこの例では 3変量のスケールや分散に それほどの違いがないためと想像される。
      • 分散共分散行列と相関行列を使ったときの違いを見てみたければ、 shintyou のみを mm 単位で測定したと考えて、 100倍したものをデータとして両者の出力を比較してみよ。
        プログラム : les1204.sas 、出力結果 : les1204.lst

  4. 主成分の数の決定基準 : 配布資料 80ページ
    明確に決まっているわけではないが、以下のような基準が一般的に 用いられている。また、結果の解釈の都合上、多少増減させることもある。

  5. いろいろなデータを主成分分析に適用して、解釈してみよう
    [演習1] 小遣いまでの 4変量のデータでは?
    [演習2] 自分の収集したデータでは?

    [注意] データによっては解釈が困難なことも有り得る。

    また、自分の思い付かない結果を含んでいることもある。

    [参考] 「J:\コンピュータによる統計解析02(林 篤裕)\」に以下のデータを置いておく。

    1. seiseki.dat
      中学2年生の成績データ。23名x5科目。国語、社会、数学、理科、英語。
      配布資料に掲載され、例題に使われていたデータ。
    2. food.dat
      100 種類の食品の嗜好度データ。100食品x10グループ。
    3. syumi.dat
      趣味に関するアンケート調査データ。30種類x6グループ。

  6. 次回は : 07月15日 14:45
    • 因子分析
    • データを転送しておくこと
    • ...

  7. [おまけ1] if 文 : ある条件に合致した場合に、特定の処理を実行する。
    [例1] 目的のサンプルだけを抽出する : 条件を書き並べる
    [例2] 変量の値を割り当てなおす : 新しい値を右辺に書く
      data seito04;
        infile 'seito.prn';
        input id $ sex $ kesseki $ 
              koku $ suu1 $ suu2 $ tireki $ koumin $ rika $;
      
        if sex^='M'     then delete;        /* male only */
        if kesseki^='0' then delete;        /* syusseki-sya only */
      
        if tireki="世界史-0" then tireki="世界史";
        if tireki="世界史-2" then tireki="世界史";
      
        if tireki="日本史-2" then tireki="日本史";
        if tireki="日本史-3" then tireki="日本史";
      ...
      

    [例3] 複数の処理をさせたい場合 : do 〜 end で囲む

        if tireki="世界史-0" then do;
          tireki="世界史";
          koumin=.;
        end;
      ...
      

    [比較演算子]

    = : 等しい
    ^= : 等しくない
    > : より大きい
    < : より小さい
    >= : 以上
    <= : 以下

    [論理演算子]

    ^ : 否定(NOT)
    & : 論理和(AND)
    | : 論理積(OR)

  8. [おまけ2] 1レコード(1行)のレコード長が長い場合 : 一行の長さの指定、例えば 230バイトだと
      data math;
        infile 'foomath.dat' lrecl=230;
      

  9. [おまけ3] 行末がそろってないデータの読み込み : 一行の長さを指定し、揃ってないことを明示
      data math;
        infile 'foomath.dat' lrecl=230 truncover;
      

  10. [おまけ4] 固定長データの読み込み : カラム位置の指定
      input
            kamoku   $   2
            kesseki  $   3
            k_code   $  10-11
            t_score     12-14
            s_scor01   103-104
            s_scor02   105-106
            s_scor03   107-108
            s_scor04   109-110
      ;
      

  11. [おまけ5] データファイルの先頭を読み飛ばす : コメント等が挿入されているような場合。先頭 3行を読み飛ばす場合は
      data math;
        infile 'foo.dat' firstobs=4;
      

  12. [おまけ6] データの生成 : 乱数で(正規乱数) : 種(seed)の指定。種は任意の数値(普通は整数)。
      data rei01;
       do i=1 to 200;
         x=rannor(12345);
         output;
       end;
      run;
      
    [参考] : 乱数を生成する関数
      rannor : 正規乱数を生威します。
      ranuni : (0,1)の間の一様乱数を生成します。
      ranbin : 二項分布に従う乱数を生成します。
      rancau : コーシー乱数を生成します。
      ranexp : 指数乱数を生成します。
      rangam : ガンマ分布に従う乱数を生成します。
      ranpoi : ポアソン分布に従う乱数を生成します。
      rantbl : 指定した確率重み関数から、乱数を生成します。
      rantri : 三角分布に従う乱数を生成します。

  13. [おまけ7 : 例4] 乱数で疑似データを 200個生成し、発生順、および昇順に並べて、それぞれをファイルに保存する
    • 91番から 110番(中央あたり)のデータの表示
    • 91番から 110番(中央あたり)のデータについて平均を計算する
    • データのアスキー保存 : フォーマット形式の指定に注意
    • データの並べ替え

    1. プログラム : les1205.sas

       /* Lesson 12-5 */
       /*    File Name = les1205.sas   07/08/04   */
      
      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. 出力結果 : les1205.lst unsorted.dat sorted.dat
      • 並べる前後での数値列を比較せよ。
      • 乱数の種類を取り替えて計算させてみよ。

  14. [おまけ8 : 例5] 軸ラベルの値を昇順、降順に並べたい
    • 昇順と降順のヒストグラム : 数値(軸ラベル)
    • 昇順と降順の度数分布表 : 数値(軸ラベル)
    • 頻度順の度数分布表 : 頻度

    1. プログラム : les1206.sas

       /* Lesson 12-6 */
       /*    File Name = les1206.sas   07/08/04   */
      
      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. 出力結果 : les1206.lst
      • どこをキーとした順で表示されているかを把握せよ。
      • 乱数の種類を取り替えて計算させてみよ。

      • 見出しを付けるには「title」を使う。
[DIR]講義のホームページへ戻ります