如何用SAS Proc SQL判断Asked表中(Name,Item)是否存在于BAGS表
可行的SAS Proc SQL实现方案
原代码无法运行的原因有两个:
- SAS Proc SQL不支持将多列组合成元组形式使用
IN子查询 - 字符常量
Y/N未加单引号,会被SAS识别为变量而非固定值
以下是两种可行的实现方法:
方法一:使用EXISTS子查询
通过EXISTS子查询检查BAGS表中是否存在匹配的(Name, Item)组合,逻辑直接且高效:
proc sql; create table brought as select name, item, case when exists ( select 1 from BAGS where BAGS.name = ASKED.name and BAGS.item = ASKED.item ) then 'Y' else 'N' end as brought_flag from ASKED; quit;
方法二:使用左连接判断
通过左连接BAGS表,根据连接结果是否为空来判断是否携带:
proc sql; create table brought as select A.name, A.item, case when B.name is not null then 'Y' else 'N' end as brought_flag from ASKED A left join BAGS B on A.name = B.name and A.item = B.item; quit;
两种方法都能实现需求,其中EXISTS子查询通常在数据量较大时性能更优,因为找到匹配项后就会停止扫描;左连接法则更直观,便于扩展其他BAGS表的字段。
内容的提问来源于stack exchange,提问作者Hanne DC
相关产品推荐
相关产品推荐

