投稿

ラベル(関数: rounde)が付いた投稿を表示しています

数値を丸める関数 round, rounde, roundz の違い - SAS

イメージ
round 関数 四捨五入ぽい計算をしてくれる関数です。 第1引数がだいたい中間の値(近似値)の場合は、絶対値が大きい方に丸めます。 rounde 関数 偶数丸め(銀行丸め / JIS丸め)ぽい計算をしてくれる関数です。 第1引数がだいたい中間の値(近似値)の場合は、偶数の方に丸めます。 roundz 関数 偶数丸め(銀行丸め / JIS丸め)計算をしてくれる関数です。 round 関数や rounde 関数と違い、ちょうど中間の値で丸めてくれます。ただし、第2引数が1以下であったり、整数の逆数(例. 整数3 の逆数 1/3)でない場合だと、実際の計算と違う値になることがあります。 偶数丸めとはなにかというと、丸めをする桁数の1つ上の桁数が偶数の値に丸める処理のことです。 例えば、小数第1位を四捨五入する場合、0.5 は 1 になりますが、偶数丸めでは 0 になります。0.5 は、1 と 0 のちょうど中間で、偶数は 0 の方なので、偶数丸めでは 0 に丸められます。では、1.5 を小数第1位で四捨五入すると 2 になり、偶数丸めでも 2 になります。 ※ ゼロは奇数ではなく、偶数です 値によって丸められ方が変わる偶数丸めですが、何がメリットがあるかというと、丸めた値の合計などを求めるときにあります。値を丸めてしまうと実際の値とは異なった値になってしまうため、誤差が生じてしまいます。このとき、四捨五入よりも偶数丸めの方が誤差が少ないというメリットがあります。 ところで、言語によって round 関数で実装されている丸め方は違います。エクセルでは四捨五入ですが、VBAだと偶数丸めです。round 関数を使用する場合、使用している言語の仕様を調べておくとトラブルを回避できるかと思います。 さてさて、実際に SAS でのそれぞれの関数の違いを見てましょう。 (コード内に使用している proc report の指定行を強調する方法については、 proc report 指定行(◯行目)を強調する - SAS をご参考ください。) /* ORG で指定した数に対して、10回 数値ADDを加算していき、 */ /* 加算していくたびに、ROUNDで指定した桁で丸め処理を実施する ...