%let dsname=Newdata;DSNAMEは、マクロ変数の名前です。
Newdata
は、マクロ変数DSNAMEの値です。次にマクロ変数の作成ルールを示します。
%let dsname=Newdata;
Newdata
は、マクロ変数DSNAMEの値です。マクロ変数の値は、単なる文字列です。文字列には、任意の文字、数字、キーボード上にある印刷可能なシンボル、文字間の空白を含めることができます。大文字小文字の情報は、マクロ変数値に保存されます。一致しない引用符などの一部の文字については、特殊な扱いが必要です。これについては後述します。
&name
がCary
に置換されてから、次のステートメントでcity
の値として割り当てられています。 %let name=Cary; %let city=&name;
割り当て
|
値
|
---|---|
定数テキスト
|
文字列。次のステートメントは、
maple という値をマクロ変数STREETに割り当てることのできる複数の方法を示しています。いずれの場合も、マクロプロセッサは、maple という5文字の値をSTREETの値として格納します。値の前後の空白は格納されません。%let street=maple; %let street= maple; %let street=maple ;注:引用符は不要です。引用符を使用した場合、それらは値の一部に含まれます。 |
数字
|
適切な数字。次の例では、マクロ変数NUMおよびTOTALSTRTを作成しています。
%let num=123; %let totalstr=100+200;マクロプロセッサは、 123 を数値として扱わず、式100+200 を評価しません。その代わり、マクロプロセッサはすべての数字を文字として扱います。
|
演算式
|
次の例のように、%EVAL関数を使用します。
%let num=%eval(100+200); / * produces 300 * /あるいは、次の例のように%SYSEVALF関数を使用します。 %let num=%sysevalf(100+1.597); / * produces 101.597 * /詳細については、マクロ評価関数を参照してください。 |
null値
|
例えば、引数の値には何も割り当てられません。
%let country=; |
マクロ変数参照
|
マクロ変数参照(¯o-variable)。次に例を示します。
%let street=Maple; %let num=123; %let address=&num &street Avenue;この例は、テキスト式に含まれる複数のマクロ変数参照を示しています。マクロプロセッサは、割り当てを実行する前に、テキスト式の置換を試みます。その結果、マクロプロセッサは、マクロ変数ADDRESSの値を 123 Maple Avenue として格納します。
%NRSTR関数を使用して文字をマスクすることで、アンパサンドとパーセント記号をリテラルとして扱うことができます。これによって、マクロプロセッサは、アンパサンドとパーセント記号をマクロ呼び出しとして解釈せず、テキストとして扱うことができます。詳細については、マクロ言語要素とマクロクォーティングを参照してください。
|
マクロ呼び出し
|
マクロ呼び出し(%macro-name)。次に例を示します。
%let status=%wait;この%LETステートメントを実行すると、マクロプロセッサによってWAITマクロも呼び出されます。 マクロプロセッサは、WAITマクロによって生成されたテキストを、STATUSの値として格納します。 %LETステートメントを実行したときにマクロが呼び出されないようにするには、次のように%NRSTR関数を使用してパーセント記号をマスクします。
%let status=%nrstr(%wait);マクロプロセッサは、 %wait をSTATUSの値として格納します。
|
空白と特殊文字
|
値を囲むマクロクォーティング関数、%STRまたは%NRSTR。マクロプロセッサが空白や特殊文字をテキストとして解釈できるようにするために、このアクションによってそれらの文字をマスクします。詳細についてはマクロクォーティング関数 を参照してください。 例えば、
%let state=%str( North Carolina); %let town=%str(Taylor%'s Pond); %let store=%nrstr(Smith&Jones); %let plotit=%str( proc plot; plot income*age; run;);マクロ変数TOWNを定義している部分では、%STRを使用して不一致の引用符を含む値をマスクしています。マクロクォーティング関数で、不一致の引用符などのシンボルにマークを付ける必要のあるマクロクォーティング関数について説明しています。 マクロ変数PLOTITを定義している部分では、%STRを使用して、マクロ変数値内の空白と特殊文字(セミコロン)をマスクしています。 マクロ変数に完全なSASステートメントを含める場合、行を分けて、DATAステップ内やPROCステップ内でインデントしてステートメントを入力すると、読みやすくなります。マクロクォーティング関数を使用すると、マクロ変数値内の意味のある空白が維持されます。
|
DATAステップの値
|
SYMPUTルーチン。次の例では、データセット内のAGEが20を超えるオブザベーションの数を、FOOTNOTEステートメントに挿入しています。
data _null_; set in.permdata end=final; if age>20 then n+1; if final then call symput('number',trim(left(n))); run; footnote "&number Observations have AGE>20";DATAステップの最後の反復を実行するときに、SYMPUTルーチンによって、Nの値が格納されたNUMBERという名前のマクロ変数が作成されます。その際、SASは、数値から文字への変換を示すメッセージを発行します。DATAステップ変数Nの値をマクロ変数NUMBERに割り当てる前に、TRIM関数とLEFT関数によって、変数Nの値から余分なスペースを削除します。 数値から文字への変換を示すメッセージを抑制することを含む、SYMPUTの説明については、CALL SYMPUTルーチン を参照してください。
|