【问题标题】:SAS macro do-loop with data step带有数据步骤的 SAS 宏循环
【发布时间】:2013-06-20 19:06:15
【问题描述】:

这是我的第一个宏,如果我遗漏了一些简单的东西,我深表歉意。

我需要执行相同的数据步骤六(或更多)次,并将每一个附加到第一个,因此我尝试了宏中的 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;

【问题讨论】:

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

标签: sas


【解决方案1】:

我认为您可能遇到了未包含在文本中的问题(即,在“做事”部分),或者您的会话不正确(即,您解决了问题,但之前的运行中出现了一些问题现在做点什么)。这运行良好(鉴于我不知道你在做什么):

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

【讨论】:

  • 感谢您的帮助。在我做的所有谷歌搜索中,我从未找到那篇特定的文章。通过在一个范围内选择一个随机日期,然后记录哪些研究样本在随机选择的日期之后冻结在一个日期范围内,从而从当前数据中抽取缺失的代码样本。
  • Joe,你是对的 - 一旦我重新启动 SAS,代码就可以工作。 掌心
猜你喜欢
  • 1970-01-01
  • 2019-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多