首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SAS:过程注册表和宏

SAS:过程注册表和宏
EN

Stack Overflow用户
提问于 2018-08-30 22:47:29
回答 2查看 295关注 0票数 0

我有一个包含30个变量和2000个观察值的数据。我想在一个循环中计算回归,同时在每个步骤中删除数据中的i行。所以最后我需要的是,我的输出将是2001年的回归,对于2000年末所有数据的回归,每次我丢弃一行的时候。

我是sas的新手,我想知道如何使用宏来做这件事,但我不明白。

任何意见和帮助,我们将不胜感激!

EN

回答 2

Stack Overflow用户

发布于 2018-08-31 01:58:51

这将创建我在对Chris的评论中提到的数据集。

代码语言:javascript
复制
data del1V /view=del1v;
   length group _obs_ 8;
   set sashelp.class nobs=nobs;
   _obs_ = _n_;
   group=0;
   output;
   do group=1 to nobs;
      if group eq _n_ then;
      else output;
      end;
   run;
proc sort out=analysis;
   by group;
   run;
票数 1
EN

Stack Overflow用户

发布于 2018-08-30 23:12:07

代码语言:javascript
复制
DATA NEW;
  DATA OLD;
  do i = 1 to 2001;
    IF _N_ ^= i THEN group=i;
    else group=.;
    output;
  end;
proc sort data=new;
  by group;
proc reg syntax;
  by group;
run;

这将创建一个更长的数据集。您只需调用proc reg一次,但它将运行2001个模型。

检查2001年的回归输出将很困难,只需将其编写为输出。您可能需要阅读PROC REG支持文档,并查看您感兴趣的任何类型的输出的输出选项。SAS可以创建具有GROUP列的数据集,以区分结果。

我根据@data null建议编辑了我的原始答案。我同意上面的可能更快,尽管我不是很有信心它会快100倍。我不太了解proc reg的开销与group by语句和更大数据集的开销。无论如何,上面的答案是更简单的编程。这是我最初的答案/替代方法。

您可以在宏程序中执行此操作。它将具有这样的一般结构:

代码语言:javascript
复制
%macro regress;
  %do i=1 %to 2001;
    DATA NEW;
      DATA OLD;
      IF _N_=&I THEN DELETE;
    RUN;
    proc reg syntax;
    run;
  %end;
%mend;
%regress

宏是SAS中的高级编程功能。宏程序是执行proc reg循环所必需的。%表示宏函数。&i是宏变量(&是正在调用的宏变量的前缀)。宏是在以%宏/ %mend开始和结束的块中创建的,并由%regress调用。

检查2001年的回归输出将很困难,只需将其编写为输出。您可能需要阅读PROC REG支持文档,并查看您感兴趣的任何类型的输出的输出选项。使用&i每次创建不同的数据集,然后作为宏循环的一部分追加在一起。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52099894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档