如果具有该 ID 的任何记录满足两个条件,则排除该 ID 的所有记录
Posted
技术标签:
【中文标题】如果具有该 ID 的任何记录满足两个条件,则排除该 ID 的所有记录【英文标题】:Excluding all records of the same ID if any record with that ID meets two conditions 【发布时间】:2022-01-18 03:31:58 【问题描述】:我有一张如下所示的表格:
ID Pet
01 Dog
01 Cat
01 Parrot
01 Guinea Pig
02 Dog
02 Guinea Pig
03 Parrot
如果一个 ID 有一只狗和一只猫,那么我想排除该 ID 的所有记录,不管他们有什么其他动物。所以我的输出表看起来像:
ID Pet
02 Dog
02 Guinea Pig
03 Parrot
这是我尝试过的查询:
PROC SQL;
CREAT TABLE new_table AS
SELECT * from Pets a
WHERE NOT EXISTS (SELECT *
FROM Pets b
WHERE b.ID = a.ID
AND b.ID = "Dog"
AND b.ID = "Guinea Cat"));
RUN;
这似乎不起作用,实际上并没有过滤掉任何东西。
【问题讨论】:
SQL 是必需的吗?为什么? @Reeza 工作目的,不幸的是。 【参考方案1】:这就是你想要的:
SELECT
*
FROM
pets
WHERE
id NOT IN
(
SELECT
a.id
FROM
pets a
JOIN
pets b
ON a.id = b.id
AND a.pet = "Dog"
AND b.pet = "Cat"
)
内部 SQL 查询正在查找同时存在 pet = "Dog"
的行和 pet = "Cat"
的行的 ID。外部 SQL 正在过滤掉这些 id。
【讨论】:
【参考方案2】:这在 PROC SQL 中很简单,因为 SAS 会自动将汇总统计信息重新合并到详细信息行中。
data have;
input ID $ Pet $20. ;
cards;
01 Dog
01 Cat
01 Parrot
01 Guinea Pig
02 Dog
02 Guinea Pig
03 Parrot
;
proc sql;
create table want as
select *
from have
group by id
having not (max(pet='Dog') and max(pet='Cat'))
order by id,pet
;
quit;
【讨论】:
以上是关于如果具有该 ID 的任何记录满足两个条件,则排除该 ID 的所有记录的主要内容,如果未能解决你的问题,请参考以下文章
如果满足 COUNT 条件,我可以应用 WHERE 子句吗?