1. 導入:なぜMEDIAN関数が重要なのか
業務システムで平均値を算出することは多いですが、平均値には「極端な外れ値に引きずられやすい」という弱点があります。例えば、少数の高額な売上が平均を大きく押し上げてしまうケースです。そんな時、データの真ん中を示す「中央値(メディアン)」を求めることで、より実態に近い傾向を把握できます。COBOLのMEDIAN関数を使えば、複雑な並び替えや条件分岐を書くことなく、一行でスマートに中央値を算出できます。
2. 基礎知識:中央値とは何か
中央値とは、数値を小さい順に並べた時にちょうど真ん中にくる値のことです。
・要素数が奇数の場合:真ん中の値が中央値になります。
・要素数が偶数の場合:真ん中にある2つの値の「平均」が中央値になります。
COBOLのMEDIAN関数は、この面倒な「並び替え」と「偶数の場合の平均算出」をすべて裏側で自動処理してくれます。
3. 実装・解決策
MEDIAN関数を利用するには、COMPUTE文を使います。引数には、個別の数値項目をカンマ区切りで指定するほか、テーブル(配列)を直接渡すことも可能です。
4. サンプルプログラム
以下のコードは、5つの売上データから中央値を求める例です。そのままコンパイルして動作を確認してみてください。
IDENTIFICATION DIVISION.
PROGRAM-ID. MEDIAN-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
- 比較対象の売上データ
01 WS-SALES-TABLE.
05 FILLER PIC 9(5) VALUE 100.
05 FILLER PIC 9(5) VALUE 500.
05 FILLER PIC 9(5) VALUE 200.
05 FILLER PIC 9(5) VALUE 800.
05 FILLER PIC 9(5) VALUE 300.
- 計算結果格納用
01 WS-RESULT PIC 9(5)V99.
PROCEDURE DIVISION.
- MEDIAN関数を使用して中央値を算出
- 100, 200, 300, 500, 800 と並び替えた場合、真ん中は300となる
COMPUTE WS-RESULT = FUNCTION MEDIAN(100, 500, 200, 800, 300)
DISPLAY “中央値は: ” WS-RESULT
GOBACK.
5. 応用・注意点
現場での開発において、特に注意すべき点は以下の2点です。
・データ型の選択:
中央値が偶数の場合の平均算出時に小数が発生することがあります。結果を受け取る項目(WS-RESULTなど)は、必ず小数点以下を保持できる「V99」などの定義にしておいてください。これを怠ると、精度が落ちたり、予期せぬ切捨てが発生したりします。
・引数の制限:
使用するCOBOLコンパイラの仕様により、一度に指定できる引数の最大数に制限がある場合があります。大量のデータを分析する場合は、MEDIAN関数に直接渡すのではなく、一度テーブルに格納してからロジックを組むか、事前に件数を確認するようにしましょう。
外れ値に惑わされない堅実なデータ分析のために、ぜひMEDIAN関数を活用してください。

コメント