【问题标题】:Where not equals not filtering anything out不等于不过滤掉任何东西
【发布时间】:2022-01-23 04:50:21
【问题描述】:

我正在尝试通过在 PROC SQL 中使用 WHERE 从表中过滤掉某些值。查询运行没有错误,但实际上并没有过滤掉任何内容。

ID   Category   Sub_Category
1    Food       Vegetables
2    Food       Chicken
3    Appliance  Mixer

我的代码如下所示:

PROC SQL;
CREATE TABLE APPLIANCE AS 
SELECT * FROM GENERAL_TABLE
WHERE Sub_Category <> "Chicken"
OR Sub_Category <> "Vegetables";
RUN;

我知道我可以将 where 语句切换为 WHERE = "Mixer" 但我想了解为什么 WHERE 没有过滤掉任何内容。

【问题讨论】:

  • 我会避免在 SAS 中使用 &lt;&gt; 作为运算符。它可能适用于 SQL 代码,但如果您在常规 SAS 代码中使用该符号,则它具有不同的含义。 MAX () 运算符返回两个值中的较高值。

标签: sas where-clause proc-sql


【解决方案1】:

你需要AND 而不是OR

OR 表示如果至少有一个条件为真,那么它将显示该行。由于其中一个条件始终为真,因此它将显示所有行。

不要使用&lt;&gt;OR,而是使用INNOT IN

PROC SQL;
CREATE TABLE APPLIANCE AS 
SELECT * FROM GENERAL_TABLE
WHERE Sub_Category not in ("Chicken", "Vegetables");
RUN;

【讨论】:

    猜你喜欢
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多