【问题标题】:Using where expression with not in operator in SAS在 SAS 中使用 where 表达式和 not in 运算符
【发布时间】:2016-06-08 07:37:40
【问题描述】:

我有一个名为 CityData 的数据库表,它通过 ODBC 使用 SAS 进行查询。该表有一个列 City,其中包含缺失/空值。 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 版。

【问题讨论】:

    标签: sas where


    【解决方案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;
    

    【讨论】:

    • 谢谢。我不知道 where 语句是由 DBMS 解释的。 AFAIK,如果 CityData 数据是本机 SAS 数据集,则条件 missing <> 'Mumbai' 将评估为 True,因此从代码角度来看,ODBC 数据与 SAS 数据集并不完全相同。感谢您指出这一点。
    • 正确 - 需要注意。更多信息:sascommunity.org/wiki/Be_Aware_of_Implicit_Pass-Through
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多