SAS比较运算符计算错误

SAS比较运算符计算错误,sas,Sas,我正在将代码从SAS转换为R,并使用PivotalR包从R运行SQLPOSTGRESQL语句 在翻译时,我注意到在SAS中,有些记录即使满足PROC SQL语句中where子句中指定的条件,也不会被选中 PROC SQL; Create table name as select ..... .........from table1 as t1 where t1.re <=10 and t1.se >= 20; QUIT; 一些进行剪切的记录会被选中,而一些记录则不会被选中,特别是当

我正在将代码从SAS转换为R,并使用PivotalR包从R运行SQLPOSTGRESQL语句

在翻译时,我注意到在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导入时,精确整数值可能存在一些问题

您可以使用pass-through让数据库而不是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中有了所需的数据。

t1.re/t1.se是整数还是小数?您可能会遇到浮点错误,即数字实际上存储为10.00001。尝试使用显式SQL传递?我建议尝试查看您在数据步骤中是否遇到相同的问题-听起来您根本不了解sas,但将where子句转换为数据步骤应该是一个相对简单的练习。@实际上,data step where子句与SQL的工作原理相同,它允许一些SQL语法,事实上您可以转换为if,但我认为这在功能上不会有什么不同,因为SAS可能会将其转换为SQL—SAS会尝试将其传递回Greenplum。@Reeza您是对的。Postgresql中的舍入错误。SAS显示的值的精度与存储该值的精度不符,但会正确评估条件。不幸的是,Postgesql舍入了精度,因此出现了异常。现在我知道我的问题是什么了。谢谢。我更改了限制以适应可能的舍入误差。将限制从25.00更改为24.95我能够看到Rpass THROWN和SAS中的差异。我通过在SAS中使用一个小数据集的简单数据步骤验证了这一点。