使用proc方法,如何使用BY语句计算加权平均值?

时间:2014-11-11 19:27:55

标签: sas

我在SAS中有以下数据集:

Obs Date ID Diam frequency 
1 19736 H-3-10 1.92 1  
2 19736 H-3-12 1.90 1  
3 19737 E-2-10 2.92 2  
4 19737 E-2-10 3.02 2  
5 19737 E-2-16 2.34 1  

我想通过DiamDate得到变量ID的加权平均值。这是我目前的代码:

proc means data= dataset;
    by Date ID;
    var Diam;
    weight frequency;
    output out = m_diam;
run;

如果我使用或weight声明,我获得的手段是相同的! 如果我省略by语句,则加权和未加权的方法是不同的。但它给了我一个整体的意思,这不是我想要的。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:3)

在你的例子中,权重并没有对手段做任何事情,因为在一个分组内权重都是相等的 - 你没有frequency具有可变金额的情况。 SUM实际上会有所不同(因为SUM是加权平均值的总和),但您不要求该统计量。在讨论相对统计数据(平均值,比例等)时,权重只会在一个分组内部做一些事情并不总是相同的。

要看到这一点,让我们举个例子,将2个权重中的一个更改为1.然后我们将创建DIAM_UNWT,并利用您可以使用weight选项的事实。 var语句仅对特定变量应用权重。这将让我们看到它正在工作 - DIAM_UNWT和DIAM在这里会有不同的值,而如果它们都是2,它们就不会。

data have;
input Date ID $ Diam frequency ;
diam_unwt=diam;
datalines;
19736 H-3-10 1.92 1  
19736 H-3-12 1.90 1  
19737 E-2-10 2.92 1 /*CHANGED*/ 
19737 E-2-10 3.02 2  
19737 E-2-16 2.34 1  
;;;;
run;
proc means data= have;
    by Date ID;
    var Diam/weight=frequency;
    var diam_unwt;
    output out = m_diam;
run;

使用DIAM_UNWT,平均值为2.97,即介于2.92和3.02之间的1/2。使用DIAM(加权),平均值为2.98666667,是它们之间的2/3(反映了2:1的重量比)。

相关问题