2016-06-24 35 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