-1

次のコードを実行すると、ログに 3 つのエラーが表示されます。エラー: この %MEND ステートメントに一致する %MACRO ステートメントがありません。エラー: マクロ NO はまだ実行中であり、再定義できません。エラー: ダミー マクロがコンパイルされます。ブラックホールの問題なのかと思っていました。しかし、構文エラーを見つけることができません。誰が私に何が問題なのか教えてもらえますか? ありがとう!

%Macro table(x);
  data m_&x; set A (where=(seqno=0));
    LENGTH DD_&x 8;
  run;
%mend table;

data _null_;
  Do u=1 to 17;
    call execute ('%nrstr(%table('||u||'))');
  end;
run;


%macro sumup_DD (x, Startdate, Enddate,i);
  data B; set A (where=(seqno=&i));
    DD_&x=sum(of &Startdate-&Enddate);
  run;
  proc append base=m_&x data=B;
  run;
%mend sumup_DD;

%macro no;
  %do n=1 %to 17;
    data _null_; set A;
      call execute('%nrstr(%sumup_DD ('||&n||','||rr&n||','||rr%eval(&n+1)||','||seqno||'))');
    run;
  %end;
%mend no; 
%no;
4

1 に答える 1

0

バグを見つけました。それは確かに、私のコメントの 1 つにある単一引用符によって引き起こされるブラック ホールの問題です! この一重引用符により、'%mend' がリテラル トークンとして認識されました。したがって、実行した次のコードはすべてマクロの一部として認識されました。

于 2013-09-22T05:21:36.727 に答える