2016-06-24 33 views
0

我想用现有SAS数据集的不同子集重复运行PROC REG。这里有一个简单的例子,数据集:如何用不同的数据子集迭代运行SAS过程?

DATA data_main; 
    input trt depth year response; 
    cards; 
1 1 2014 1.1 
1 2 2014 1.2 
2 1 2014 1.3 
2 2 2014 1.4 
1 1 2013 2.2 
1 2 2013 2.4 
2 1 2013 2.6 
2 2 2013 2.8 
; 
run; 

因为我要运行这个程序,其中current_data是当前TRT和深度的组合TRT和深度的每个组合:

PROC REG data = current_data; 
    model response = year; 
run; 

我想捕捉一个数据集或文本文件中所有迭代的回归系数和p值。

在我的实际数据集中输入和trt的级别数量要大得多,所以我试图避免手动编码每个组合。有人可以向我解释如何做到这一点?

+1

BY TRT DEPTH;并在proc语句中使用OUTEST =。 –

+0

@data_null_谢谢,这很完美。我让它太难了。 – Robert

+1

您也可以使用'ODS table parameterestimates = want;'来获得一个p值参数估计表。 – Reeza

回答

1

考虑运行一个遍历trtdepth的组合的宏。在嵌套循环下面,迭代地重新创建current_data数据集并在回归过程中使用它输出相应的结果表。根据需要调整所有组合的循环限制值范围:

%macro loopregression; 
%do j = 1 %to 2;     * TRT VALUES; 
    %do i = 2013 %to 2014;  * DEPTH VALUES; 
     DATA current_data; 
      SET data_main; 
      if trt = &j;  
      if depth = &i; 
     run; 

     PROC REG data = current_data noprint outest=results&i&j;; 
      model response = year; 
     run; 
    %end; 
%end; 
%mend loopregression; 

%loopregression; 
+0

感谢您解释这一点。我最初尝试使用宏观方法,但无法使其工作。对我的文章Data_null_的评论是最简单的解决方案,但你的答案是非常有用的,因为我想学习如何使用宏。 – Robert