为什么在proc比较中找到proc平均值和proc sql步骤的平均值会产生不同的结果?

时间:2017-12-13 15:06:33

标签: sql sas compare mean sas-macro

我有以下代码。创建的数据集是test_means和test_sql。两者都采用您选择的变量的简单平均值。

两者都是用眼睛创建完全相同的数字。

为什么proc比较说这些值不等于愚蠢的小值,比如0E-14?这是否与数字存储在两个程序中的方式有​​关?

%let var=; *Insert numeric variable to check;
%let dsn=; *Insert dataset name;

proc means noprint mean data=&dsn.;
    var &var.;
    output out=test_means (keep=_STAT_ &var. where=(_STAT_="MEAN"));
run;

proc sql;
    create table test_sql as select
        "MEAN" as _STAT_ length=8,
        mean(&var.) as &var.
    from &dsn.
    ;
quit;

proc compare data=test_means compare=test_sql;
run;

1 个答案:

答案 0 :(得分:1)

对于浮点值的计算(如SAS编号),可以预期E-14的顺序差异。这与不同的PROC没有特别的关系;它所需要的只是以不同的顺序对值进行求和以产生沿这些线的误差。如果行以不同的方式处理(例如,由于多线程),即使PROC SQL中的两个不同运行也会产生这种大小的差异。

通常应使用PROC COMPARE选项执行

FUZZ次运行,除非您要比较非常小的数字。这通常应该是标准实践的一部分,除非您特别希望看到这种差异(意味着,除非您要验证两个文件是同一个文件,而不仅仅是相同的值)。