这是我的第一个宏,所以如果我错过了一些简单的话,我很抱歉。
我需要执行相同的数据步骤六(或更多)次并将每个数据追加到第一个,所以我在宏中尝试了一个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;
答案 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)。