反復%DOステートメントの初期値および終了値に小数を利用する方法

[OS] ALL
[リリース] ALL
[キーワード] MACRO, %SYSEVALF

[質問]

反復%DOステートメントにおけるインデックス変数の初期値および終了値には、整数もしくは整数を生成するマクロ式を指定する必要があるとマニュアルには記載がありますが、小数を指定することはできないのでしょうか。

[回答]

マニュアルに記載のとおり、反復%DOマクロステートメントにおける初期値および終了値は、整数および整数を生成するマクロ式である必要があります。
もし小数を指定した場合、SASシステムはエラーを返します。代替案として、初期値および終了値として指定したい小数値に、小数点以下の桁数に合わせて10や100を掛け整数値として利用し、生成された値を同じ数で除すことで、小数の利用も可能となります。

以下の例では、初期値を0.5、終了値を0.7とし、0.1ずつインデックス変数の値を増分させる方法を記載しています。
この場合、初期値・終了値に10を掛け、生成された値を10で除しています。0.01ずつ増分させたい場合には、100を掛けた後に100で除します。

例:マクロプログラムでの使用例


                                                       /* 初期値および終了値 */
  %LET start = 0.5;
  %LET end   = 0.7;

  %MACRO test;
                                           /* 初期値および終了値に10を掛ける */
  %DO i = %SYSEVALF(&start*10) %TO %SYSEVALF(&end*10);
    %LET newval = %SYSEVALF(&i/10);        /* インデックス変数の値を10で除す */
    %PUT &newval;                                /* ログウィンドウへ値を出力 */
  %END;
  %MEND;

  %test                                                      /* マクロの実行 */

例:出力結果の例


   0.5
   0.6
   0.7