前のページ|次のページ

%SYSEVALF関数

浮動小数点演算を使用して、算術演算式や論理式を評価します。

種類: マクロ関数
参照項目: %EVAL関数

構文

%SYSEVALF(expression<, conversion-type>)

必須引数

expression

評価する演算式または論理式を指定します。

conversion-type

変換後の値の型を指定します。%SYSEVALFの戻り値は、ここに指定された値の型に変換されます。変換後の値は、その型の値を必要とする他の式で使用できます。conversion-typeには次のいずれかを指定できます。

BOOLEAN

次のいずれかを返します。

  • 式の結果がゼロまたは欠損値である場合、0
  • 結果がそれ以外の場合、1
たとえば次のように記述します。
%sysevalf(1/3,boolean)      /* returns 1 */
%sysevalf(10+.,boolean)     /* returns 0 */

CEIL

式の結果に等しいかまたはそれより大きい最小の整数を表す文字値を返します。ただし、結果の値と、それに最も近い整数との差の絶対値が10

%sysevalf(1 + 1.1,ceil)       /* returns  3 */
%sysevalf(-1 -2.4,ceil)       /* returns −3 */
%sysevalf(-1 + 1.e-11,ceil)   /* returns  0 */
%sysevalf(10+.)               /* returns  . */

FLOOR

式の結果に等しいかまたはそれより小さい最大の整数を表す文字値を返します。ただし、結果の値と、それに最も近い整数との差の絶対値が10

%sysevalf(-2.4,floor)         /* returns −3 */
%sysevalf(3,floor)            /* returns  3 */
%sysevalf(1.-1.e-13,floor)    /* returns  1 */
%sysevalf(.,floor)            /* returns  . */

INTEGER

結果の整数部を表す文字値を返します(小数部を切り捨てます)。ただし、結果の値と、それに最も近い整数との差の絶対値が10

%put %sysevalf(2.1,integer);        /* returns  2 */
%put %sysevalf(-2.4,integer);       /* returns −2 */
%put %sysevalf(3,integer);          /* returns  3 */
%put %sysevalf(-1.6,integer);       /* returns −1 */
%put %sysevalf(1.-1.e-13,integer);  /* returns  1 */

詳細

%SYSEVALF関数は、浮動小数点演算を実行し、出力形式BEST32.を使ってフォーマット化した値を返します。評価結果は常にテキストとなります。%SYSEVALF関数は、浮動小数点や欠損値を含んでいる論理式を評価できる唯一のマクロ関数です。引数conversion-typeを指定すると、%SYSEVALF関数が次のいずれかの値を返す場合に発生する問題を回避できます。
  • 欠損値または浮動小数点数値を生成するマクロ式
  • 整数値を必要とする他のマクロ式で使用されるマクロ変数
%SYSEVALFの引数に演算子が含まれておらず、かつconversion-typeも指定されていない場合、指定した引数がそのまま返されます。
SASマクロ言語による式の評価の詳細については、マクロ式を参照してください。

比較

  • %SYSEVALF関数は浮動小数点数をサポートします。一方、%EVAL関数は整数演算のみを実行します。
  • 浮動小数点式を評価するマクロでは、%SYSEVALFマクロ関数を使用する必要があります。マクロ式を評価する場合、マクロプロセッサは自動的に%EVAL関数を使用します。

例: 浮動小数点評価の例

次に示すマクロFIGUREITは、 %SYSEVALF関数の戻り値を様々な型に変換します。
%macro figureit(a,b);
   %let y=%sysevalf(&a+&b);
   %put The result with SYSEVALF is: &y;
   %put  The BOOLEAN value is: %sysevalf(&a +&b, boolean);
   %put  The CEIL value is: %sysevalf(&a +&b, ceil);
   %put  The FLOOR value is: %sysevalf(&a +&b, floor);
   %put  The INTEGER value is: %sysevalf(&a +&b, int);
%mend figureit;
%figureit(100,1.597)
このプログラムを実行すると、SASログに次のメッセージが書き込まれます。
The result with SYSEVALF is:101.597 The BOOLEAN value is:1 The CEIL value is:102 The FLOOR value is:101 The INTEGER value is:101
前のページ|次のページ|ページの先頭へ