前のページ|次のページ

RESOLVE関数

DATAステップの実行中に、テキスト式の値を置換します。

種類: DATAステップ関数

構文

RESOLVE(argument)

必須引数

argument

次の項目のいずれかです。

  • 一重引用符(DATAステップの作成中にマクロプロセッサによって引数が置換されないようにするため)で囲んだテキスト式。マクロ変数値にマクロ変数参照が含まれている場合、RESOLVEはその参照を置換しようとします。argumentが存在しないマクロ変数を参照している場合、RESOLVEは、未置換の参照を返します。テキスト式を使用する次の例は、マクロLOCATEによって生成されたテキストを割り当てる方法と、マクロ変数NAMEの値を割り当てる方法を示しています。
    x=resolve('%locate');
    x=resolve('&name');
  • テキスト式を値として持つDATAステップ変数の名前。たとえば、次の例では、DATAステップ変数ADDR1の現在の値に含まれるテキスト式をXに割り当てています。
    addr1='&locate';
    x=resolve(addr1);
  • マクロ機能によって置換されるテキスト式を生成する文字式。たとえば、次の例では、マクロ名の作成において、DATAステップ変数STNUMの現在の値を使用しています。
    x=resolve('%state'||left(stnum));
RESOLVE関数はセキュアマクロを参照できません。

詳細

RESOLVE関数は、特に置換先の変数に短い長さを割り当てていなければ、DATAステップ文字変数の最大長の文字値を返します。それよりも長い値が返された場合、切り捨てられます。
RESOLVEは、引数で指定されたマクロ変数またはマクロを検出できなかった場合、未置換の引数を返し、マクロプロセッサによって警告メッセージが発行されます。
SYMPUTルーチンを使用してマクロ変数を作成し、それと同じDATAステップ内でRESOLVEを使用してそのマクロ変数を置換できます。

比較

  • RESOLVEは、DATAステップまたはSCLプログラムの実行時にテキスト式の値を置換します。一方、マクロ変数参照は、DATAステップの作成時またはSCLプログラムのコンパイル時に置換されます。このため、置換されたマクロ変数参照の値は、DATAステップまたはSCLプログラムが実行されている間、一定になります。これに対して、RESOLVEは、プログラムの各反復において、テキスト式の異なる値を返すことができます。
  • RESOLVEは、SYMGET関数が受け取るよりも、多くの種類の引数を受け取ることができます。SYMGETは1つのマクロ変数しか置換しません。一方、RESOLVEは任意のマクロ式を置換します。RESOLVEを使用することで、マクロを実行することや、複数のマクロ変数を置換することができます。
  • マクロ変数の値に別のマクロ変数参照が含まれている場合、RESOLVEはその参照を置換しようとします。一方、その場合、SYMGETは置換しません。
  • argumentが存在しないマクロ変数を参照している場合、RESOLVEは未置換の参照を返します。一方、その場合、SYMGETは欠損値を返します。
  • RESOLVEは、柔軟性が高いため、SYMGETよりもわずかに多くコンピュータリソースを必要とします。

例: サンプル参照の置換

次の例は、マクロ変数参照、マクロ呼び出し、およびマクロ呼び出しを値として持つDATAステップ変数と共に使用されるRESOLVEを示しています。
%let event=Holiday;
%macro date;
   New Year
%mend date;
data test;
   length var1-var3 $ 15;
   when='%date';
   var1=resolve('&event'); /* macro variable reference */
   var2=resolve('%date');  /* macro invocation */
   var3=resolve(when);     /* DATA step variable with macro invocation */
   put var1=  var2=  var3=;
run;
このプログラムを実行すると、SASログに次のメッセージが書き込まれます。
VAR1=Holiday VAR2=New Year VAR3=New Year NOTE:The data set WORK.TEST has 1 observations and 4 variables.
前のページ|次のページ|ページの先頭へ