【发布时间】:2015-11-10 09:41:22
【问题描述】:
我使用具有数百列的大表。而且我一直遇到一个问题,即需要检查多个用作标志的列(值为 1 或缺失)是否存在相同的条件。举个简单的例子,
proc sql;
create table Applications as
select t1.ApplicantID
, t1.ApplicationDate
, t2.Segment
from Applicants as t1 inner join
Segmentation as t2 ON t1.ApplicantID = t2.ApplicantID
where t1.ApplicantID ^= ''
AND (t1.TR_flag = '') AND (t1.TL_flag = '')
AND (t1.RU_flag = '') AND (t1.RP_flag = '')
AND (t2.OP_flag = '') AND (t2.OU_flag = '')
AND (t2.GG_flag = '') AND (t2.GK_flag = '')
order by t1.ApplicantID
;
quit;
因此,我想知道是否有任何简洁的方法可以一步检查所有标志变量的这种情况。我确实意识到我可以使用数组选项进行循环,但对于这样一个简单的问题来说似乎太复杂了。我也可以将所有变量连接成一个字符串并在新字符串上使用条件,但这种解决方案并不通用。基本上我正在寻找的是类似于 IN 运算符但进入相反方向的东西,例如,
where t1.ApplicantID ^= ''
AND (t1.TR_flag, t1.TL_flag, t1.RU_flag, t1.RP_flag,
t2.OP_flag, t2.OU_flag, t2.GG_flag, t2.GK_flag) = ''
这在视觉上会更容易,并且在最佳情况下运行得更快。
【问题讨论】:
-
将示例中的 AND 替换为 AND COALESCE