「ERROR: マクロ XXXXXXXX が CARDS ( データ行 ) を生成しました。」

[OS] ALL
[リリース] ALL
[キーワード] Base, MACRO, ERROR, message, CARDS

[質問]

下記のようなマクロプログラムを実行したとき、「ERROR: マクロ XXXXXXXX が CARDS ( データ行 ) を生成しました。」というエラーになりました。
マクロでCARDSステートメントは使用できないのでしょうか。

実行したプログラム


  %MACRO test; 

    DATA sample;
      INPUT name $;
    CARDS;
  X
  Y
  ;
    run;

  %MEND test;

  %test

エラーメッセージ


ERROR: マクロ TEST が CARDS ( データ行 ) を生成しました。 
不当な結果の原因になるかもしれません。 DATAステップとマクロ の実行を中止します。

[回答]

マクロの中でCARDSステートメントを使用することはできません。
マクロソースはマクロ定義テーブルに格納される際、ブランクが詰められてリフォーマットされますが、CARDSステートメントよりも後のデータは、リフォーマットされると改行位置がわからなくなるため、仕様上の制限として使用できません。

下記のいずれかの方法で対応してください。

1. データを外部ファイルに保存して、INFILEステートメントで入力する

   DATA sample; 
     INFILE 'c:¥sasdata¥sample.txt';
     INPUT name $; 
   RUN;

2. CARDSステートメントを使用しているDATAステップをマクロの外に出す
 

3. (データが少量の場合)割り当てステートメントで値をセットする

   DATA sample; 
     name='X'; OUTPUT;
     name='Y'; OUTPUT;
   RUN;