いわゆる「偏差値」を計算するプログラム

Last-modified: 2008-05-17 (土) 17:16:08

大学受験などに対して模擬試験を受けると「偏差値」と呼ばれる数値がよく計算されます。
これは、元データ(ここでは、テストの点数)を全受験者で平均が50、標準偏差が10と
なるように変換した数値です。
点数が平均的なら50あたりになり、成績が良ければ50を超え、悪ければ50より小さく
なります。
試験結果がある程度「自然なもの」であれば、どんなに成績が良くても
80を超える偏差値はなかなかとれないと言われています。

計算そのものは、元データの平均と標準偏差を計算しておいて、

(点数-平均)/標準偏差×10+50

と計算できます。

SASで行うとなると、DATAステップとMEANSプロシジャを組み合わせて
簡単に計算できます。ただし、変数がたくさんあると処理に手間が
かかります。
そのような場合には、Base SASのSTANDARDプロシジャが利用できます。
まさしくそのような目的のために存在するプロシジャです。

data data1;             /*サンプルデータ*/
  input math @@;
datalines;
34 56 97 67 26 62
;
run;

/*MEANSプロシジャで平均と標準偏差を計算する*/
proc means data=data1 noprint vardef=n;
  var math;
  output out=data2 mean=m std=s; /*データセットへ出力*/
run;

data data3;
  if _n_=1 then set data2;  /*平均と標準偏差を元データに結合*/
  set data1;
  math=10*(math-m)/s+50;    /*偏差値の計算*/
run;

/*偏差値を確認する*/
proc print data=data3;
  var math;
  format math 3.0;
run;

/*サンプルデータ その2*/
data data4;
  input math english sci;
datalines;
34 78 47
56 67 38
97 43 64
67 23 74
26 15 37
62 45 57
;
run;

/*STANDARDプロシジャで、平均が50標準偏差が10となるように標準化する*/
proc standard data=data4 mean=50 std=10 vardef=n out=data5;
  var _numeric_;
run;

/*偏差値を確認する*/
proc print data=data5;
  format math 3.0;
run;