SAS中四个表的单元格平均值
Cell by cell average of four tables in SAS
我有三个表,如下所示:
A B C A B C A B C
D 1 2 3 D 2 3 4 D 3 4 5
E 4 5 6 E 5 6 7 E 6 7 8
F 7 8 9 F 8 9 10 F 9 10 11
我想在 SAS 中逐个单元格地计算这些表的平均值。所以输出应该如下所示:
A B c
D 2 3 4
E 5 6 7
F 8 9 10
因此第一个单元格的计算方式如下 (1 + 2 + 3) / 3 = 3
目前我完全不知道如何做到这一点,但我正在查看 proc means 和 proc freq,这看起来很有希望。
在此先感谢您的帮助。
在 SAS/IML 中这是微不足道的。
proc iml;
a = {1 2 3,4 5 6,7 8 9};
b = {2 3 4,5 6 7,8 9 10};
c = {3 4 5,6 7 8,9 10 11};
d = (a+b+c)/3;
print a b c d;
quit;
在 SQL 或 base SAS 中,有一些方法可以解决这个问题,同样,假设您打错了第三个数据集(D F G 应该是 D E F)。如果你没有打错,那就更难了。
data a;
input ID $ a b c;
datalines;
D 1 2 3
E 4 5 6
F 7 8 9
;;;;
run;
data b;
input ID $ a b c;
datalines;
D 2 3 4
E 5 6 7
F 8 9 10
;;;
run;
data c;
input ID $ a b c;
datalines;
D 3 4 5
E 6 7 8
F 9 10 11
;;;;
run;
data for_d;
set a b c;
by id;
run;
proc means data=for_d;
var a b c;
class ID;
output out=d mean=;
run;
SQL 解决方案的输入有点多,但最终相似(您可以跳过 for_d
步骤)。只需将 a、b、c 连接在一起并计算查询中的平均值。
我有三个表,如下所示:
A B C A B C A B C
D 1 2 3 D 2 3 4 D 3 4 5
E 4 5 6 E 5 6 7 E 6 7 8
F 7 8 9 F 8 9 10 F 9 10 11
我想在 SAS 中逐个单元格地计算这些表的平均值。所以输出应该如下所示:
A B c
D 2 3 4
E 5 6 7
F 8 9 10
因此第一个单元格的计算方式如下 (1 + 2 + 3) / 3 = 3
目前我完全不知道如何做到这一点,但我正在查看 proc means 和 proc freq,这看起来很有希望。
在此先感谢您的帮助。
在 SAS/IML 中这是微不足道的。
proc iml;
a = {1 2 3,4 5 6,7 8 9};
b = {2 3 4,5 6 7,8 9 10};
c = {3 4 5,6 7 8,9 10 11};
d = (a+b+c)/3;
print a b c d;
quit;
在 SQL 或 base SAS 中,有一些方法可以解决这个问题,同样,假设您打错了第三个数据集(D F G 应该是 D E F)。如果你没有打错,那就更难了。
data a;
input ID $ a b c;
datalines;
D 1 2 3
E 4 5 6
F 7 8 9
;;;;
run;
data b;
input ID $ a b c;
datalines;
D 2 3 4
E 5 6 7
F 8 9 10
;;;
run;
data c;
input ID $ a b c;
datalines;
D 3 4 5
E 6 7 8
F 9 10 11
;;;;
run;
data for_d;
set a b c;
by id;
run;
proc means data=for_d;
var a b c;
class ID;
output out=d mean=;
run;
SQL 解决方案的输入有点多,但最终相似(您可以跳过 for_d
步骤)。只需将 a、b、c 连接在一起并计算查询中的平均值。