我正在为下面的问题寻找解决办法。我使用的是sas,因此基本的sql或datastep方法都是受欢迎的。也许解决方法很简单,但我对sas有点陌生,找不到解决方法。
我得到了一个数据集,想通过一个条件删除第二级的子组。为了更简单,让我举个例子来解释。条件是:当colc中的任何值为1时,删除maingroup中的子组。主群是cola,子群是colb
ColA | ColB | ColC
1 | a | 0
1 | a | 1
1 | b | 0
1 | b | 0
2 | a | 0
2 | a | 0
2 | b | 0
2 | b | 0
3 | a | 0
3 | a | 0
3 | b | 1
3 | b | 0
预期产量:
ColA | ColB | ColC
1 | b | 0
1 | b | 0
2 | a | 0
2 | a | 0
2 | b | 0
2 | b | 0
3 | a | 0
3 | a | 0
我试过这样的方法:
select * from data
group by ColA, ColB having ColC <> 1
我想,将按两列分组,并选择不带colc=1的所有组。但它只“删除”colc=1的行。
另一种方法是这样的:
select * from data
where ColA in (select ColA from data where ColC <> 1)
当然,我不能用这个联系到小组。我也在考虑加入,但不知道怎么做。
5条答案
按热度按时间3vpjnl9f1#
这个
having
sql中的子句将允许您通过摘要函数筛选查询。下面的查询表示只包含ColC
分组依据后为0ColA
以及ColB
.ryevplcw2#
你可以用
not exists
使用相关子查询:这将保留所有
cola
/colb
没有一个1
在colc
.这也可以适用于
delete
,但您似乎需要筛选的结果集。3pvhb19x3#
这里是一个使用双道循环的数据步方法
wsewodh24#
使用通用代码的简单方法:
第一个have选择colc=1的所有记录,由于我们正在按cola和colb合并,if语句将删除具有相同cola和colb的所有记录,这就是目标。
eanckbw95#
此外,哈希对象方法