univariateプロシジャで任意のパーセント点を出力する話

適当なテストデータをつくります

data Q1;
call streaminit(2015);
do i= 1 to 100;
X = int(rand('uniform')*100);
output;
end;
run;

パーセント点を算出してデータセットに出力したい場合、
univariateプロシジャを利用して、以下のようにかけます

proc univariate data = Q1 noprint ;
var X ;
output out = A1
p1    =p1
p5    =p5
p10   =p10
q1    =p25
median=p50
q3    =p75
p90   =p90
p95   =p95
p99   =p99
;
run ;





1%点はp1 5%点はp5 といったようにキーワードが決まっていて
結果を格納したい変数を右辺に書くわけです。
q1は25%点、q3は75%点、medianは50%点のことです。

ただ、例えば35%点を算出したいと思って p35= と書いてもエラーになります。
上のコードで指定したポイント以外は、統計量キーワードとして登録されていません。

しかし、じゃあできないと言うわけではなく、そういった場合は
pctlpts= と pctlpre = をセットで使うことで可能になります。

まずpctlpts=で、出したいパーセント点を指定します。
そしてpctlpre=で格納する変数名の接頭部分を指定します。

pctlpts=35 pctlpre = p とするとできる変数名はp35
pctlpts=55 pctlpre = XX とするとできる変数名はXX55
みたいな感じです。

実際に

proc univariate data = Q1 ;
var X ;
output out = A2
       pctlpts  = 35
       pctlpre = p ;
run ;





という感じです。

pctlpts=の指定は、複数指定もできて、例えば以下のように
かけば、0から100まで5%刻みで出力したりできます。

proc univariate data = Q1 noprint ;
var X ;
output out = A3
       pctlpts  = 0 to 100 by 5
       pctlpre = p ;
run ;

画像は途中までです






複数変数の場合は

proc univariate data = Q1 noprint ;
var X i ;
output out = A4
       pctlpts  = 35
       pctlpre = PX_ Pi_ ;
run ;






のようにも書けます。



0 件のコメント:

コメントを投稿