Sas-macros

提供:Dev Guides
移動先:案内検索

SAS-マクロ

SASには Macros と呼ばれる強力なプログラミング機能があり、コードの繰り返しセクションを回避し、必要なときに何度でも繰り返し使用できます。 また、同じコードの異なる実行インスタンスに対して異なる値を取ることができる動的変数をコード内に作成するのにも役立ちます。 マクロは、マクロ変数と同様の方法で複数回再利用されるコードブロックに対しても宣言できます。 以下の例で、これらの両方を確認します。

マクロ変数

これらは、SASプログラムが繰り返し使用する値を保持する変数です。 これらは、SASプログラムの開始時に宣言され、プログラム本体の後半で呼び出されます。 スコープ内でグローバルまたはローカルにすることができます。

グローバルマクロ変数

これらは、SAS環境で利用可能なSASプログラムからアクセスできるため、グローバルマクロ変数と呼ばれます。 一般に、それらは複数のプログラムによってアクセスされるシステム割り当て変数です。 一般的な例はシステム日付です。

以下は、システム日付を表すSYSDATEというSAS変数の例です。 レポートが生成されるたびにSASレポートのタイトルにシステム日付を印刷するシナリオを考えてください。 タイトルには、値をコーディングせずに現在の日付と曜日が表示されます。 SASHELPライブラリで利用可能なCARSと呼ばれる組み込みSASデータセットを使用します。

proc print data = sashelp.cars;
where make = 'Audi' and type = 'Sports' ;
 TITLE "Sales as of &SYSDAY &SYSDATE";
run;

上記のコードを実行すると、次の出力が得られます。

global_macro_result

ローカルマクロ変数

これらの変数は、プログラムの一部として宣言されているSASプログラムからアクセスできます。 それらは通常、データセットの異なる観測値を処理できる同じSASステートメントslに異なる変数を供給するために使用されます。

構文

ローカル変数は、以下の構文でデカールされます。

% LET (Macro Variable Name) = Value;

ここで、Valueフィールドは、プログラムの必要に応じて、任意の数値、テキスト、または日付値を取ることができます。 マクロ変数名は、有効なSAS変数です。

変数は、変数名の先頭に追加された*&文字を使用するSASステートメントによって使用されます。 以下のプログラムは、メイク「アウディ」とタイプ「スポーツ」のすべての観察を取得します。 *異なるmake *の結果が必要な場合は、プログラムの他の部分を変更せずに変数 *make_name の値を変更する必要があります。 プログラムを持ち込む場合、この変数はSASステートメントで何度も参照できます。

%LET make_name = 'Audi';
%LET type_name = 'Sports';
proc print data = sashelp.cars;
where make = &make_name and type = &type_name ;
 TITLE "Sales as of &SYSDAY &SYSDATE";
run;

上記のコードを実行すると、以前のプログラムと同じ出力が得られます。 しかし、 type name を 'Wagon' に変更して、同じプログラムを実行しましょう。 以下の結果が得られます。

local_macro_result

マクロプログラム

マクロは、名前で参照されるSASステートメントのグループであり、プログラム内でその名前を使用してどこでも使用できます。 %MACROステートメントで始まり、%MENDステートメントで終わります。

構文

ローカル変数は、以下の構文で宣言されます。

# Creating a Macro program.
%MACRO <macro name>(Param1, Param2,….Paramn);

Macro Statements;

%MEND;

# Calling a Macro program.
%MacroName (Value1, Value2,…..Valuen);

以下のプログラムは、 'show_result'; という名前のマクロの下で、SAT staemnetsのグループをデカールします。このマクロは、他のSASステートメントによって呼び出されています。

%MACRO show_result(make_ , type_);
proc print data = sashelp.cars;
where make = "&make_" and type = "&type_" ;
TITLE "Sales as of &SYSDAY &SYSDATE";
run;
%MEND;

%show_result(BMW,SUV);

上記のコードを実行すると、次の出力が得られます。

program_macro_result

一般的に使用されるマクロ

SASには、SASプログラミング言語に組み込まれている多くのMACROステートメントがあります。 それらは、明示的に宣言せずに他のSASプログラムで使用されます。一般的な例は、いくつかの条件が満たされたときにプログラムを終了するか、プログラムログの変数のランタイム値をキャプチャします。 以下に例を示します。

マクロ%PUT

このマクロステートメントは、テキストまたはマクロ変数情報をSASログに書き込みます。 以下の例では、変数「today」の値がプログラムログに書き込まれます。

data _null_;
CALL SYMPUT ('today',
TRIM(PUT("&sysdate"d,worddate22.)));
run;
%put &today;

上記のコードを実行すると、次の出力が得られます。

macro_put

マクロ%RETURN

特定の条件が真であると評価されると、このマクロを実行すると、現在実行中のマクロが正常に終了します。 以下の例では、変数 "val" の値が10になると、マクロは終了します。

%macro check_condition(val);
   %if &val = 10 %then %return;

   data p;
      x = 34.2;
   run;

%mend check_condition;

%check_condition(11)  ;

上記のコードを実行すると、次の出力が得られます。

macro_return

マクロ%END

このマクロ定義には、必要に応じて%ENDステートメントで終了する*%DO%WHILE *ループが含まれています。 次の例では、testという名前のマクロがユーザー入力を受け取り、この入力値を使用してDOループを実行します。 DOループの終わりは%endステートメントによって達成され、マクロの終わりは%mendステートメントによって達成されます。

%macro test(finish);
   %let i = 1;
   %do %while (&i <&finish);
      %put the value of i is &i;
      %let i=%eval(&i+1);
   %end;
%mend test;
%test(5)

上記のコードを実行すると、次の出力が得られます。

macro_do_finish