前のページ|次のページ

SYMGET関数

DATAステップの実行時に、マクロ変数の値をDATAステップに返します。

種類: DATAステップ関数
参照項目: RESOLVE関数SYMGETN関数CALL SYMPUTルーチン、および CALL SYMPUTNルーチン

構文

SYMGET(argument)

必須引数

argument

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

  • 引用符で囲み、アンパサンドを付けないマクロ変数の名前。マクロ変数値に別のマクロ変数参照が含まれる場合、SYMGETはその参照の置換を試みません。argumentが存在しないマクロ変数を参照している場合、SYMGETは欠損値を返します。次の例は、マクロ変数Gの値をDATAステップ変数Xに割り当てる方法を示しています。
    x=symget('g');
  • DATAステップ文字変数の名前。引用符を付けずに指定し、1つ以上のマクロ変数の名前を格納します。この値が有効なSAS名でない場合、またはマクロプロセッサがこの名前のマクロ変数を検出できなかった場合、注釈がログに書き込まれます。その注釈には、関数に不正な引数が渡されたため、戻り値に欠損値が設定されたことが示されます。たとえば、次のステートメントでは、マクロ変数名が格納されたDATAステップ変数CODEの値を、DATAステップ変数KEYに割り当てています。
    length key $ 8;
    input code $;
    key=symget(code);
    DATAステップの反復ごとに、CODEの値によってマクロ変数名が指定され、そのマクロ変数の値がKEYに割り当てられます。
  • マクロ変数名を作成する文字式たとえば、次のステートメントでは、DATAステップ自動変数_N_を使用して、文字sと現在の反復回数を割り当てています。
    score=symget('s'||left(_n_));

詳細

SYMGETは、DATAステップ文字変数の最大長を持つ文字値を返します。それよりも長い値が返された場合、切り捨てられます。
SYMGETは、引数で指定されたマクロ変数を検出できなかった場合、欠損値を返し、不正な引数が関数に渡されたことを示すメッセージが発行されます。
SYMGETは、SCLプログラムなどのすべてのSAS言語プログラムで使用できます。SYMGETは、マクロの実行時ではなくプログラムの実行時に変数を置換するため、DATAステップビュー、SQLビュー、およびSCLプログラムのマクロ変数値を返すために使用する必要があります。

比較

  • SYMGETは、プログラムの実行時に、マクロ変数の値を返します。一方、SYMPUT関数は、プログラムの実行時に、プログラムで生成された値をマクロ変数に割り当てます。
  • SYMGETは、RESOLVE関数よりも少ない種類の引数を受け取ります。SYMGETは、1つのマクロ変数のみを置換します。RESOLVEを使用すると、マクロが実行されて、さらに値が置換されます。
  • SYMGETは、すべてのSASプログラムで使用できます。一方、SYMGETNは、SCLプログラムでのみ使用できます。

例: データセットから以前割り当てられた変数値を取得する

data dusty;
   input dept $ name $ salary @@;
   datalines;
bedding Watlee 18000    bedding Ives 16000
bedding Parker 9000     bedding George 8000
bedding Joiner 8000     carpet Keller 20000
carpet Ray 12000        carpet Jones 9000
gifts Johnston 8000     gifts Matthew 19000
kitchen White 8000      kitchen Banks 14000
kitchen Marks 9000      kitchen Cannon 15000
tv Jones 9000           tv Smith 8000
tv Rogers 15000         tv Morse 16000
;
proc means noprint;
   class dept;
   var salary;
   output out=stats sum=s_sal;
run;
proc print data=stats;
   var dept s_sal;
   title "Summary of Salary Information";
   title2 "For Dusty Department Store";
run;
data _null_;
   set stats;
   if _n_=1 then call symput('s_tot',s_sal);
   else call symput('s'||dept,s_sal);
run;
data new;
   set dusty;
   pctdept=(salary/symget('s'||dept))*100;
   pcttot=(salary/&s_tot)*100;
run;
proc print data=new split="*";
   label dept   ="Department"
         name   ="Employee"
         pctdept="Percent of *Department* Salary"
         pcttot ="Percent of *   Store  * Salary";
   format pctdept pcttot 4.1;
   title  "Salary Profiles for Employees";
   title2 "of Dusty Department Store";
run;
このプログラムは、次の出力を生成します。
給与情報の要約
給与情報の要約
従業員の給与分析
従業員の給与分析
前のページ|次のページ|ページの先頭へ