SAS:proc reg和macro

时间:2018-08-30 14:47:29

标签: sas sas-macro

我有一个包含30个变量和2000个观察值的数据。 我想循环计算回归,在每一步中删除数据中的i行。 所以最后我需要的输出是2001 regrsion,这是我每次删除行时对所有数据端2000的regring的结果。

我是sas的新手,我想找到如何使用宏进行操作,但是我不理解。

任何评论和帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

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

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 :(得分:0)

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语句的开销以及更大的数据集的开销还不够了解。不管上面的答案是更简单的编程。这是我的原始答案/替代方法。

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

%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是一个宏变量(&是被调用的宏变量的前缀)。宏是在以%macro /%mend开始和结束的块中创建的,并由%regress调用。

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