小数点以下の桁数を指定して切り捨てを行なう方法

[OS] ALL
[リリース] ALL
[キーワード] Base, decimal, truncate

[質問]

小数点以下の桁数を指定して、切り捨てを行なう方法はありますか?四捨五入はROUND関数で可能ですが、数値の切り 捨てをしたいと考えています。たとえば、「1.2345」を小数点以下第3位までで切り捨てて、「1.234」を求めるような方法です。

[回答]

小数点以下の桁数を指定して切り捨てを行なう関数はサポートされていませんが、INT関数を利用して、任意の桁で切り 捨てした値を求められます。

例1:小数点以下第3位までで切り捨てる


   DATA a;
     INPUT a;
     b=INT(a*(10 ** 3)) / 10 ** 3;
     PUT b=;                                       /* 値の確認 */
   CARDS;
   3.14159
   -3.14159
   ;
   RUN;

例1の結果


   b=3.141
   b=-3.141

例2:小数点以下第4位までで切り捨てる


   DATA a;
     INPUT a;
     b=INT(a*(10 ** 4)) / 10 ** 4;
     PUT b=;                                       /* 値の確認 */
   CARDS;
   3.14159
   -3.14159
   ;
   RUN;

例2の結果


b=3.1415
b=-3.1415

なお、上記の手順をSASマクロにして使用することもできます。


                                               /* マクロの定義 */
   %MACRO d_omit(var,d);
     %*** 小数の桁数を指定して切り捨て ***;
     %*** var: 変数 ***;
     %*** d: 桁数 ***;
     INT(&var*(10 ** &d)) / 10 ** &d
   %MEND d_omit;

   DATA a;
     a=3.14159;
     b=%d_omit(a,3);                       /* マクロの呼び出し */
     PUT b=;                                       /* 値の確認 */
   RUN;