sql 和 proc 之间结果的 SAS 差异意味着

SAS differences in outcome between sql and proc means

我想对宏变量中的某些变量进行加权平均。我的变量是 zindi&aa 我的体重是 wprm&aa

我正在尝试理解两种方法:

一个有 proc sql

proc sql noprint;
    select mean(zindi&aa. * wprm&aa.)/sum(wprm&aa.) into :Mean_zindi_aa
    from Panel(where=(annee&ap.<="&nais18" ));
quit;

它让我得到平均 0.77

一个有proc的意思

proc means data=Panel(where=(annee&ap.<="&nais18" )); 
    var zindi&ap. ;
    weight wprm&ap ;
    output out=mean_zindi&ap mean=moy&ap;
run;

然后是数据_null_部分

得出的平均值约为 20200,这似乎是正确的

所以我的问题是

    proc sql noprint;
    select sum(zindi&aa. * wprm&aa.)/sum(wprm&aa.) into :Mean_zindi_aa
    from Panel(where=(annee&ap.<="&nais18" ));
    quit;

试试这个。看起来您正在尝试对 (zindi&aa. * wprm&aa.) 进行平均。如果您需要加权平均值,则上述方法应该有效。因为加权平均值 = sum(weight*variable)/sum(weights)

将您的 PROC SQL 更改为:

proc sql noprint;
    select SUM(zindi&aa. * wprm&aa.)/sum(wprm&aa.) into :Mean_zindi_aa
    from Panel(where=(annee&ap.<="&nais18" ));
quit;

您需要对乘积求和,而不是求均值。