SAS宏执行循环数据步骤

时间:2013-06-20 19:06:16

标签: sas

这是我的第一个宏,所以如果我错过了一些简单的话,我很抱歉。

我需要执行相同的数据步骤六(或更多)次并将每个数据追加到第一个,所以我在宏中尝试了一个do循环。一切都在删除循环的情况下工作,但是一旦添加了do循环,我就会收到错误,或者说我有一个额外的%end或一个无关的修复。欢迎所有想法。谢谢!

%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;

1 个答案:

答案 0 :(得分: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中,通常有一种比将数据拆分为多个数据集更好的方法。但是因为我不知道你在做什么我不能真正建议除了推荐阅读this article并记住它之外的更好的方法(即使你做的不同于引导,这个概念适用于几乎所有的SAS)。