2014-02-14 37 views
3

平均值我有一個SAS數據集,讓我們說:如何找到列在SAS

No d1 d2 d3 ... dn 
1 2 3 4 ... n1 
2 3 4 5 ... n2 
3 4 5 6 ... n3 

我現在需要找到SAS所有列的平均值。 有沒有辦法做到這一點?

列數不是特定的。 如果我需要d1的平均值 - dn列,那麼我期待的輸出爲:

3 4 5 .. (n1+n2+n3)/3 

有沒有一種方式,在數據步或使用PROC SQL或PROC IML這樣做要麼?

回答

4

假設所有必需的變量與d開始,那麼你可以使用冒號通配符將其全部選中。我在這裏使用了PROC SUMMARY,這與使用NOPRINT選項的PROC MEANS相同。顯然,這是答案的從@pteranodon

proc summary data=have nway; 
var d: ; 
output out=want (drop=_:) mean=; 
run; 
2

是的,在數據​​步驟中,您可以使用類似mean(OF d1-d100)的東西。注意函數內部的of。這是一個符號參考,說計算d1,d2,d3,...,d100列的平均值

+0

我認爲OP希望列意味着整個觀察,並不意味着每個觀測中列的非常小的改變。樣本數據給出了相同的結果。 – pteranodon

5

proc means是計算列式統計的方式。

data have; 
    input No d1 d2 d3 d4; 
datalines; 
1 2 8 60 80 
2 3 12 50 70 
3 4 10 40 60 
; 
run; 

proc means data=have noprint nway; 
    var d1-d4; 
    output 
    out=want(drop=_TYPE_ _FREQ_) 
    mean=; 
run; 

如果您不需要它們,那麼drop =子句將會排除類型和頻率的自動變量。

1

您可以使用PROC裝置,例如,

PROC MEANS DATA = indata; 
VAR d1-dn; 
OUTPUT=outdata MEAN=m1-mn; 
RUN; 
+0

如果我不知道n的價值,它會不斷變化? – user3311403

+0

在信封的後面,我使用PROC CONTENTS輸出一個包含我的變量名稱的數據集,然後使用CALL SYMPUT(http://www2.sas.com/proceedings/forum2007/050-2007.pdf)生成一個宏隨着我所有的d1 - dn變量。您可能需要先調換數據...我必須仔細檢查。無論如何,可能有更好的辦法...但是如果我只想在一兩分鐘內想到它,並不一定在尋找最好的方法來處理它,只需要一個簡單並且可以工作的方法,將outFiling PROC CONTENTS和用CALL SYMPUT構建宏變量是我的方法 – evanv