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 ) );
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 ) );
Author And Source
この問題について(SAS 数値を有効桁数で四捨五入する関数(fcmpプロシジャ)), 我々は、より多くの情報をここで見つけました https://qiita.com/saspy/items/498e0187880b9742c5ae著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .