SAS内部Proc SQL案例混淆
我有一个proc-sql步骤,我正在使用创建宏变量来做一些列表处理。
我已经遇到了一个令人困惑的步骤,其中,使用CASE语句,而不是一个WHERE语句的结果所产生的数据集是一个空字符串(“”)
有包含在没有空字符串的第一行任一表中的字段。
这些是与所有的宏业务为简单起见移除的两个示例SQL以下步骤:使用所述第一片的代码的结果是具有多个行的表
create table test as
select distinct
case
when brand in (select distinct core_brand from new_tv.core_noncore_brands) then brand
end as brand1
from new_tv.new_tv2
;
create table test2 as
select distinct brand
from new_tv.new_tv2
where brand in (select distinct core_brand from new_tv.core_noncore_brands)
;
,第一个是一个空字符串。
第二段代码按预期工作
有什么理由为此?
这个问题所以null基本上是行的结果,这些行不属于true,并且返回一个空字符串,因为我没有ELSE? – scott
的确,它们仍然被选中,因为它们不被WHERE标准排除。由于它们不符合CASE标准,因此它们为NULL,您可以通过ELSE或其他WHEN/THEN方式在CASE语句中给它们一个不同的值,或者在WHERE标准中限制它们。 –
真棒,谢谢 – scott