SAS 比较运算符评估不正确

SAS Comparison operator evaluating incorrectly

我正在将代码从 SAS 翻译成 R,并使用 PivotalR 包来 运行 SQL(POSTGRESQL) 来自 R 的语句。

翻译时,我观察到在 SAS 中,有些记录即使满足 PROC SQL 语句中 where 子句中指定的条件也不会被选中。

PROC SQL;
Create table name as select .....
.........from table1 as t1
where t1.re <=10 and t1.se >= 20;
QUIT;

一些符合条件的记录会被选中,而另一些则不会,尤其是当列值等于限制时(在上述情况下,re=10 和 se=20)。

当我 运行 来自 R 的等效查询时,我没有遇到这个问题。对此有任何合理的解释吗?(运行 GREEN PLUM 上的 POSTRESQL)

正如 Reeza 所说,从 postgres 导入时,精确整数值可能存在一些问题。

您可以使用传递让数据库而不是 SAS 进行处理。这应该允许您从 where 子句中获得您期望的结果,因为 PostgreSQL 将完成这项工作。

proc sql;
    /* Open database connection */
    connect to postgres as pg (/* Connection options, same as in libname */);

    /* Create a SAS dataset */
    create table name as
    select * 
    from connection to pg (
        /* Postgres SQL statement to be run on the Postgres server */
        select *
        from table1 as t1
        where 
            t1.re <=10 and 
            t1.se >= 20
    );
    /* Close database connection */
    disconnect from pg;
quit; 

如果这给出了相同的意外结果,那么您在 R 中看到的行为很可能是异常的,如果不是,那么您现在在 SAS 中拥有了您想要的数据。