SAS中四个表的逐个单元格平均值

时间:2017-02-20 16:24:44

标签: sas proc-sql sas-iml

我有三张表看起来如下:

     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手段和proc freq,这似乎很有希望。

在前面感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

在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或基础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加在一起,然后计算查询中的均值。