平均值我有一個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這樣做要麼?
平均值我有一個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這樣做要麼?
假設所有必需的變量與d開始,那麼你可以使用冒號通配符將其全部選中。我在這裏使用了PROC SUMMARY,這與使用NOPRINT選項的PROC MEANS相同。顯然,這是答案的從@pteranodon
proc summary data=have nway;
var d: ;
output out=want (drop=_:) mean=;
run;
是的,在數據步驟中,您可以使用類似mean(OF d1-d100)
的東西。注意函數內部的of
。這是一個符號參考,說計算d1,d2,d3,...,d100列的平均值
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 =子句將會排除類型和頻率的自動變量。
您可以使用PROC裝置,例如,
PROC MEANS DATA = indata;
VAR d1-dn;
OUTPUT=outdata MEAN=m1-mn;
RUN;
如果我不知道n的價值,它會不斷變化? – user3311403
在信封的後面,我使用PROC CONTENTS輸出一個包含我的變量名稱的數據集,然後使用CALL SYMPUT(http://www2.sas.com/proceedings/forum2007/050-2007.pdf)生成一個宏隨着我所有的d1 - dn變量。您可能需要先調換數據...我必須仔細檢查。無論如何,可能有更好的辦法...但是如果我只想在一兩分鐘內想到它,並不一定在尋找最好的方法來處理它,只需要一個簡單並且可以工作的方法,將outFiling PROC CONTENTS和用CALL SYMPUT構建宏變量是我的方法 – evanv
我認爲OP希望列意味着整個觀察,並不意味着每個觀測中列的非常小的改變。樣本數據給出了相同的結果。 – pteranodon