0

这是我的第一个宏,所以如果我错过了一些简单的东西,我深表歉意。

我需要执行相同的数据步骤六(或更多)次,并将每一个附加到第一个,所以我在宏中尝试了一个 do-loop。删除循环后一切正常,但是一旦添加了 do-loop,我就会收到错误,说我有一个额外的 %end 或一个无关的 %mend。欢迎所有想法。谢谢!

%macro freeze_samples(orig_file=, samples= , Start_Freeze_Incr=, 
           End_Freeze_Incr= );
%do i = 1 %to &samples;

data freeze_slice_&i;  
    set &orig_file;

     (do stuff)

run;

    * If we have more than one slice, append to previous slice(s).;
    %if &i > 1 %then %do;
        proc append base = temp_1 data = temp_&i;
        run;
    %end;

%end;

%mend;
4

1 回答 1

4

我认为您要么有一个未包含在文本中的问题(即,在“做事”部分),要么您的会话不正确(即,您解决了问题,但以前的运行中有一些东西现在搞砸了)。这运行良好(鉴于我不知道你在做什么):

%macro freeze_samples(orig_file=, samples= , Start_Freeze_Incr=, 
           End_Freeze_Incr= );
%do i = 1 %to &samples;

data freeze_slice_&i;  
    set &orig_file;

     *(do stuff);

run;

    * If we have more than one slice, append to previous slice(s).;
    %if &i > 1 %then %do;
        proc append base = freeze_slice_1 data = freeze_slice_&i;  
        run;
    %end;

%end;

%mend;

%freeze_samples(orig_file=sashelp.class,samples=2,start_freeze_incr=1,end_freeze_incr=5);

我会注意到,您最好不要以这种方式做任何事情;在 SAS 中,通常有比将数据拆分为多个数据集更好的方法。但是因为我不知道你在做什么,所以除了推荐阅读这篇文章并牢记在心之外,我真的不能提出更好的方法(即使你做的事情与引导不同,这个概念几乎适用于SAS)。

于 2013-06-20T19:15:52.223 回答