我有一个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?
答案 0 :(得分:6)
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 :(得分:4)
假设所有必需的变量都以d开头,那么您可以使用冒号通配符运算符来全部选择它们。我在这里使用过PROC SUMMARY,这与使用NOPRINT选项的PROC MEANS相同。显然,这是对@pteranodon
的答案的一个非常小的改动proc summary data=have nway;
var d: ;
output out=want (drop=_:) mean=;
run;
答案 2 :(得分:2)
是的,在数据步骤中,您将使用类似mean(OF d1-d100)
的内容。注意函数内的of
。这是一个象征性的参考,说计算d1,d2,d3,...,d100列的平均值
答案 3 :(得分:1)
您可以使用PROC MEANS,例如
PROC MEANS DATA = indata;
VAR d1-dn;
OUTPUT=outdata MEAN=m1-mn;
RUN;