今回は引数違いの同名マクロについて解説していきたいと思います。(事前に読んでおきたい記事:【SAS】%MACROはマクロを定義することができる。その3 マクロには引数を設定できる。【%MEND】 | ビジネスイッチ (how-to-business.com))
/* act1_1 */
%macro act1;
data data1;
id1="1111"; id2="1111"; id3="1111";
output;
id1="2222"; id2="2222"; id3="2222";
output;
id1="3333"; id2="3333"; id3="3333";
output;
run;
%mend;
%macro act1(no);
data data&no.;
id1="1111"; id2="1111"; id3="1111";
output;
id1="2222"; id2="2222"; id3="2222";
output;
id1="3333"; id2="3333"; id3="3333";
output;
run;
%mend;
%macro act1(no1,no2);
data data&no1.&no2.;
id1="1111"; id2="1111"; id3="1111";
output;
id1="2222"; id2="2222"; id3="2222";
output;
id1="3333"; id2="3333"; id3="3333";
output;
run;
%mend;
%act1;

- %macro~%mendでマクロを定義することができる。
- %act1でマクロを呼び出している。
- 呼び出されるマクロは「act1(no1,no2)」
- 引数が無いため、データセット名は「DATA」
/* act1(no)_1 */
%macro act1;
data data1;
id1="1111"; id2="1111"; id3="1111";
output;
id1="2222"; id2="2222"; id3="2222";
output;
id1="3333"; id2="3333"; id3="3333";
output;
run;
%mend;
%macro act1(no);
data data&no.;
id1="1111"; id2="1111"; id3="1111";
output;
id1="2222"; id2="2222"; id3="2222";
output;
id1="3333"; id2="3333"; id3="3333";
output;
run;
%mend;
%macro act1(no1,no2);
data data&no1.&no2.;
id1="1111"; id2="1111"; id3="1111";
output;
id1="2222"; id2="2222"; id3="2222";
output;
id1="3333"; id2="3333"; id3="3333";
output;
run;
%mend;
%act1(2);

- %macro~%mendでマクロを定義することができる。
- %act1(2)でマクロを呼び出している。
- 呼び出されるマクロは「act1(no1,no2)」
- 引数は2のため、no1に”2″が入り、データセット名は「DATA2」
/* act1(no1,no2)_1 */
%macro act1;
data data1;
id1="1111"; id2="1111"; id3="1111";
output;
id1="2222"; id2="2222"; id3="2222";
output;
id1="3333"; id2="3333"; id3="3333";
output;
run;
%mend;
%macro act1(no);
data data&no.;
id1="1111"; id2="1111"; id3="1111";
output;
id1="2222"; id2="2222"; id3="2222";
output;
id1="3333"; id2="3333"; id3="3333";
output;
run;
%mend;
%macro act1(no1,no2);
data data&no1.&no2.;
id1="1111"; id2="1111"; id3="1111";
output;
id1="2222"; id2="2222"; id3="2222";
output;
id1="3333"; id2="3333"; id3="3333";
output;
run;
%mend;
%act1(3,4);

- %macro~%mendでマクロを定義することができる。
- %act1(3,4)でマクロを呼び出している。
- 呼び出されるマクロは「act1(no1,no2)」
- 引数は3,4のため、データセット名は「DATA34」
引数の数だけが異なり、同名マクロだった場合、一番最後に定義したマクロが実行された。
(引数の数による区別はできない。)
(参考:【SAS】%MACROはマクロを定義することができる。その2 同名マクロによる再定義【%MEND】 | ビジネスイッチ (how-to-business.com))