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 中拥有了您想要的数据。
我正在将代码从 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 中拥有了您想要的数据。