数値の有効桁数を揃えて出力する方法

[OS] ALL
[リリース] ALL
[キーワード] ABS function, LOG10 function, INT function, ROUND function

[質問]

計算結果やプロシジャからの出力値の桁数が異なる際、表示時に 同一桁数にならない場合があります。
その際、有効桁数を揃えて表示するには,どうしたらよいのでしょうか。

[回答]

ROUND関数で有効数字の桁を指定することにより、有効桁数を揃えることができます。
指定する有効桁数は、ABS関数、LOG10関数、およびINT関数を使用して以下のように求めることが可能です。

  1. INT 関数により値が整数であるか小数であるかで処理を分ける。
  2. LOG10関数により何桁の数値かを算出する
  3. 2の値を用いて設定した有効桁となるように、累乗の値を調整する。
  4. 3の値を用いてROUND関数により指定した有効桁での丸めを行なう。

以下の例は、前述の手順で有効桁数が3になるように桁数を揃えるプログラムです。

例:有効桁数を3桁で揃えるプログラム例


   DATA one;
     INPUT x;
     IF int(x) ne 0 THEN DO;
                                                      /* 整数の場合 */
       _3sigdigit=ROUND(x,10**(INT(LOG10(ABS(x)))-2));
       END;
     ELSE DO;
                                                      /* 小数の場合 */
       _3sigdigit=ROUND(x,10**(-1*(ABS(INT(LOG10(ABS(x))))+3)));
       END;

   DATALINES;
   1234
   12345
   0.01234
   ;
   RUN;

   PROC PRINT;
     FORMAT x _3sigdigit  12.5;
   RUN;

同様のサンプルプログラムが、以下のURLにも記載されています。