2014-03-25 83 views
0

我有以下格式的數據集: 一個M行和2K列的表。 我的列是變量對:X_i,Y_i和行是觀察值。SAS中的單個數據集上的幾個迴歸問題

我想進行很多的線性迴歸:每對一列(Y_i〜X_i) ,並獲得結果。

我知道如何使用數組訪問特定列,就像這樣:

data Xs_Ys_data (drop=i); 
array Xs[60] X1-X60; 
array Ys[60] Y1-Y60; 

我也知道如何適應一個單一的線性迴歸模型,就像這樣:

proc reg data=some_data; 
model y = x; 
output out=out_lin_reg; 
run; 

而且我很熟悉與循環的概念:

do i=1 to 60; 
Xs[i] .......; 
end; 

如何結合這三個來得到我所需要的?

謝謝!

PS - 我問過類似的問題,在不同的格式在這裏:

SAS reading a file in long format


更新:

我已成功地創建使用宏像這樣的迴歸:

%macro mylogit(); 
    %do i = 1 %to 60; 
     proc reg data=Xs_Ys_data; 
      model Y&i = X&i; 
     run; 
%end; 
%mend; 

%mylogit() 

現在我不知道如何導出結果LTS到一個表...

+0

答案是,你沒有。以長格式執行迴歸。另一種選擇是將變量拉入宏字符串中,但在任何情況下,這很難做到,並且在計算機資源上更難。 – Joe

+0

嗨喬,它似乎與宏一起工作。做完這些之後,有沒有簡單的方法將參數估計值保存在單個表中?謝謝! –

+0

再次,正確地做。該宏將運行60個迴歸,這將花費很長時間並創建60個表格,然後您必須將它們附加在一起。以長格式構建它(你表明你已經有了這個)並使用BY語句。 – Joe

回答

0

您在您的宏有這樣的:

proc reg data=Xs_Ys_data; 
     model Y&i = X&i; 
    run; 

因此,而不是創造:

data x_y_Data; 
set xs_yx_data; 
array xs x1-x60; 
array yx y1-y60; 
do iter = 1 to dim(xs); 
x=xs[iter]; 
y=ys[iter]; 
output; 
end; 
run; 

proc reg data=X_Y_data; 
    by iter; 
    model Y = X; 
run; 

,然後添加一個輸出語句但是你通常會得到你結果數據集。現在您可以得到1個輸出表,其中60次迭代(仍然是60個輸出),如果您想創建一個打印輸出,則可以從輸出數據集中構建輸出。

+0

我對這些愚蠢的問題表示歉意。我對SAS非常陌生,通過整理網絡上發現的信息來開展工作......時間在這裏並不是一個問題,所以我不必擔心這一點。我不知道如何添加一個輸出語句,這樣我就可以將所有的語句放在一個表中(好像你提示這是可能的)。此外,我不確定爲什麼宏的使用不好(因爲它似乎工作和計算模型 - 只是不打印到一個地方......)謝謝! –

+0

宏只是一個過度複雜的方式來做到這一點,當上述做同樣的事情。查找PROC REG上的文檔,它解釋瞭如何添加輸出語句。 – Joe