0

こんにちは、あるマクロを使用して別のマクロを呼び出すプログラムがあります。

2 つの月 (jun12 と jul12) があり、各月には 2 つの部分 (1 と 2) があります。「Loop」というマクロを構築するループを実行したいです。その中で、配列を構築し、Do コメント do を使用しましたマクロ「try」を呼び出します。

うまくいかないようです。誰かがそれを手伝ってくれますか?ありがとうございました!

 LIBNAME EC100006 "G:\sample";
%MACRO try(month=,part=);
      ...FROM EC100006.monthitsum&month.lag&part AS t1
%MEND try;

%Macro test;
    ARRAY Mon(2) jun12 jul12;
    %Do i=1 %to 2;
        %Do j=1 %to 2
            %try(month=Mon(i),part=j)
        %End
    %End
%Mend test;

%test
4

2 に答える 2

0

だから今はこんな感じです

LIBNAME EC100006 "G:\sample";
%MACRO try(month=,part=);
  ...FROM EC100006.monthitsum&month.lag&part AS t1
%MEND try;

Data Array
ARRAY Mon{2} jun12 jul12;
RUN;
%Macro test;
    %Do i=1 %to 2;
    %Do j=1 %to 2
        %try(month=Mon(i),part=j)
    %End
%End
%Mend test;

%test
于 2012-11-29T18:28:46.900 に答える
0

マクロ変数の配列を持つことはできません。

パラメーターのリストを指定してマクロを繰り返し呼び出す最も簡単な方法は、それらのパラメーターを指定してデータセットを作成し、CALL EXECUTE を使用するか、PROC SQL を使用してマクロ呼び出しのマクロ リストを作成し、データセットから呼び出すことです。

data call;
input month $ part;
datalines;
jun12 1 
jul12 2
;;;;
run;

proc sql;
select cats('%try(month=',month,',part=',part,')') into :mcalllist 
  separated by ' ' 
  from call;
quit;

&mcalllist;

これは、呼び出しの価値が 20,000 文字未満の場合にのみ機能します。それ以上の場合は、別のオプション (%include ファイルまたは call execute) を試す必要があります。

于 2012-11-28T14:21:13.007 に答える