SAS 数値を有効桁数で四捨五入する関数(fcmpプロシジャ)


数値変数を、有効数字を指定して有効桁で四捨五入したい

SAS関数はなさそう...
(四捨五入するだけならround)
fcmpプロシジャで関数を作る

fcmpプロシジャ

options cmplib = _null_;

proc Fcmp outlib = work.FUNC.A;
  function dig( HENSUU , DIG ) $100;
    length RESULT FMT $100 KETASUU ROUND_VAR 8;
    if HENSUU = . then RESULT = "";
    else do;
      if HENSUU = 0 then KETASUU = 0;
      else KETASUU = floor( log10( abs( HENSUU ) ) ) + 1;

      ROUND_VAR = round( HENSUU , 0.1 ** ( DIG - KETASUU ) );
      FMT = cats( "15." , max( DIG - KETASUU , 0 ) );

      RESULT = cats( putn( ROUND_VAR , FMT ) );
    end;

    return( RESULT );
  endsub;
run;

作った関数ためす

options cmplib = work.FUNC;

data work.CHECK;
  input VAL;
  A = dig( VAL , 4 );
  cards;
12345
1.23
1234.5
123.4567
0.12345
0.00123
;
run;

%put %sysfunc( dig( 12345.67 , 4 ) );