使用where表达式而不是SAS中的运算符

时间:2016-06-08 07:37:41

标签: sas where

我有一个名为CityData的数据库表,它通过ODBC使用SAS查询。该表有一列City,其中包含Missing / Null值。 SAS中的以下数据步骤未给出预期结果 -

Data New;
set CityData;
where pop> 10000 and City not in ('Mumbai')
run;

上面的代码从输出数据集中排除了Null值。但是,以下代码按预期工作

Data New;
set CityData;
where pop > 10000 and (City not in ('Mumbai') or City is Null);
run;

为什么呢?我使用的是Windows SAS版本9.4。

1 个答案:

答案 0 :(得分:1)

这是由于DBMS评估空值的方式。 libname引擎通过隐式传递发送您的where语句,并且评估为:

where pop> 10000 and City ne 'Mumbai'

null <> 'Mumbai' = null,因此没有返回。

您还缺少where语句中的分号。

Data New;
set CityData;
where pop> 10000 and City not in ('Mumbai'); 
run;