%MACRO %MEND SAS

【SAS】%MACROはマクロを定義することができる。その4 引数違いの同名マクロは区別できない。【%MEND】

投稿日:

今回は引数違いの同名マクロについて解説していきたいと思います。(事前に読んでおきたい記事:【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)

-%MACRO, %MEND, SAS

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

【SAS】「NOTE: PROC SQLはNOEXECオプションを設定し、ステートメントの構文をチェックします。」の対処法

今回はSQLプロシージャを実行した際に、NOEXECオプションを使用していないにも関わらず、 勝手にNOEXECオプションが有効になってしまう場合の対処法について解説します。 結論:構文エラーを正す。 …

【SAS】SUMMARYは集計に便利

今回はSUMMARYについて解説します。 /*正常形*/ data data1; 契約番号=”AAAAAA”; 会社コード=”02″; 請求金額=4999; output; 契約番号=”AAAAAA” …

【SAS】SASUSERライブラリの性質について解説

今回はSASUSERライブラリについて解説します。(対比参考:【SAS】WORKライブラリの性質について解説 | ビジネスイッチ (how-to-business.com)) libnameを使わなく …

【SAS】IFステートメントは処理を分岐できる。その3~サブセットIF~

今回はサブセットIFについて解説していきたいと思います。 (参考:【SAS】IFステートメントは処理を分岐できる。その1 | ビジネスイッチ (how-to-business.com)) (参考:【S …

【SAS】FREQプロシージャは頻度集計とクロス集計をする その2【LIST】【CROSSLIST】【NOROW】【NOCOL】

今回はFREQプロシージャにオプションを用いた場合について解説します。  FREQプロシージャの基本的な使い方については過去記事で解説しています。⇒【SAS】FREQプロシージャは頻度集計とクロス集計 …