2013-06-20 80 views
-1

这是我的第一个宏,所以如果我错过了简单的东西,我很抱歉。SAS宏做数据步骤循环

我需要做相同的数据步骤六(或更多)次,并追加每一个到第一个,所以我尝试了一个宏内的do循环。一切工作与循环删除,但一旦添加循环,我得到的错误,要么说我有一个额外的%末端或多余的%修补。所有想法都欢迎。谢谢!

%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

这是一个非问题,可以通过重新启动SAS会话来解决。 – JustinJDavies

回答

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 )。

+0

感谢您的帮助。在我做的所有谷歌搜索中,我从来没有找到那篇特别的文章。缺失的代码通过选择一个范围内的随机日期从当前数据中采样,然后记录哪个研究样本在随机选择的日期之后的日期范围内冻结。 – VillageCat

+1

乔,你是对的 - 一旦我重新启动SAS,代码工作。 *脸掌* – VillageCat