如何在SAS SQL中筛选Name、ID相同但Code列取值不同的记录
核心实现思路
先按Name和ID两个字段分组,统计每个分组下不同Code的数量,只要分组内Code去重后数量大于1,就把该分组下的所有记录全部取出即可。
各场景实现代码
1. SQL 实现(支持绝大多数数据库)
写法1:窗口函数(性能更优)
SELECT Name, ID, Code FROM ( SELECT *, COUNT(DISTINCT Code) OVER (PARTITION BY Name, ID) AS distinct_code_count FROM 你的表名 ) t WHERE distinct_code_count > 1;
写法2:子查询匹配(兼容旧版本SQL)
SELECT Name, ID, Code FROM 你的表名 WHERE (Name, ID) IN ( SELECT Name, ID FROM 你的表名 GROUP BY Name, ID HAVING COUNT(DISTINCT Code) > 1 );
2. Excel 实现
新增辅助列,输入如下公式(假设Name在A列、ID在B列、Code在C列,数据从第2行开始),筛选辅助列结果大于0的行即可:
=COUNTIFS(A:A,A2,B:B,B2,C:C,"<>"&C2)
3. Python Pandas 实现
import pandas as pd # 替换为你的数据表 df = pd.read_excel("你的数据文件路径.xlsx") # 筛选逻辑 result = df[df.groupby(['Name', 'ID'])['Code'].transform('nunique') > 1] print(result)
内容的提问来源于stack exchange,提问作者Andy birada
相关产品推荐
相关产品推荐

