我有一個很多列的表,但爲了解釋我的 問題,我將使用這個簡單的表。SAS做彙總統計不可用proc的意思
data test;
input a b c;
datalines;
0 0 0
1 1 1
. 4 2
;
run;
我需要計算公共摘要統計作爲最小值,最大值和缺失數。但我還需要計算一些特殊數字作爲高於一定水平的值的數量(在本例中> 0和> 1)。
我可以使用proc平均值,但它只給出正常情況下的結果,如min,max等。
我要的是下列格式結果:
var minval maxval nmiss n_above1 n_above2
a 0 1 1 1 0
b 0 4 0 2 1
c 0 2 0 2 1
我已經能夠使這個了信息的一個變量,這個相當 愚蠢代碼:
data result;
set test(keep =b) end=last;
variable = 'b';
retain minval maxval;
if _n_ = 1 then do;
minval = 1e50;
maxval = -1e50;
end;
if minval > b then minval = b;
if maxval < b then maxval = b;
if b=. then nmiss+1;
if b>0 then n_above1+1;
if b>2 then n_above2+1;
if last then do;
output;
end;
drop b;
run;
這產生如下表:
variable minval maxval nmiss n_above1 n_above2
b 0 4 0 2 1
我知道必須有更好的辦法做到這一點。我習慣於Python和Pandas。在那裏,我只會遍歷每個變量,計算不同的摘要統計信息並將結果追加到每個變量的新數據框中。
我大概也可以使用proc sql。下一個例子
proc sql;
create table res as
select count(case when a > 0 then 1 end) as n_above1_a,
count(case when b > 0 then 1 end) as n_above1_b,
count(case when c > 0 then 1 end) as n_above1_c
from test;
quit;
這給了我:
n_above1_a n_above1_b n_above1_c
1 2 2
但是,這並沒有解決我的問題。
你熟悉SQL? SAS有一個PROC SQL,這將是解決這個問題的一種方法。如果你想堅持使用PROC MEANS,你可以使用二進制變量'GreaterThan0'和'GreaterThan2'並使用PROC MEANS來求和它們。 – Quentin
我已經使用PROC SQL,但我看不出如何解決我的問題。我只用它來計算總和,最大值和最小值。但我不明白我將如何計算大於x的列。 – fossekall
現在無法測試。難道你不能'選擇min(a),max(a),sum(missing(a)),sum(a> 0)'? – Quentin