Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sas 使用proc means,如何使用BY语句计算加权平均值?_Sas - Fatal编程技术网

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

Sas 使用proc means,如何使用BY语句计算加权平均值?,sas,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 我想通过Date和ID得到变量Diam的加权平均值。以下是我当前的代码: proc means data= dataset; by Date ID; var

我在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  
我想通过
Date
ID
得到变量
Diam
的加权平均值。以下是我当前的代码:

proc means data= dataset;
    by Date ID;
    var Diam;
    weight frequency;
    output out = m_diam;
run;
如果我使用或不使用
weight
语句,我获得的平均值是相同的! 如果我通过语句省略了
,则加权平均值和未加权平均值是不同的。但它给了我一个总体的平均值,这不是我想要的。

感谢您的帮助。

在您的示例中,权重对平均值没有任何影响,因为在by组中,权重都是相等的-您没有任何情况下
频率
的数量是可变的
SUM
实际上是不同的(因为SUM是加权平均数的和),但你们不需要那个统计数据。只有在讨论相对统计数据(平均值、比例等)时,在分组中权重并不总是相同时,权重才会起作用

要查看此操作,让我们以您的示例为例,将2个权重之一更改为1。然后,我们将创建DIAM_UNWT,并利用这样一个事实,即您可以使用
var
语句上的
weight
选项仅对特定变量应用权重。这将让我们看到它正在工作-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;

对于直径UNWT,平均值为2.97,在2.92和3.02之间为1/2。直径(加权)的平均值为2.98666667,是它们之间的2/3(反映了2:1的重量比)。

谢谢,现在我想我理解了重量声明!您还可以使用CLASS语句代替BY(PROC-MEANS语句中的NWAY选项)。您不需要对数据进行预排序。当然,尽管这不会改变这里的结果(仍然不会看到权重的差异)。