如何解决是否可以在 sas oracle 传递中使用 CASE 表达式?
我正在使用带有左连接的 SAS-Oracle Pass-Through 查询。是否可以在选择中使用 CASE 语句? 举个例子:
proc sql;
connect to oracle (user=&user. password=&password. buffsize=1000 path=XXX);
create table
lib.test
as select
*
from connection to oracle (
select
a.variable1,a.variable2,a.variable3,b.variable4,case when b.variable5 = 'K' and b.variable6 < b.variable7 then b.variable6 else . end as variable_new
from table1 a
left join table2 b
on
a.id=b.id
where
a.variable5 = 'X'
group by
a.variable1,b.variable_new
);
disconnect from oracle;
quit;
没有带有 case 语句的代码行,代码运行没有问题。所以我认为必须改变一些东西。 是否可以在这里使用 case 表达式?或者有另一种方法可以做到这一点? 非常感谢任何帮助!
到目前为止,感谢您的帮助!正如我在评论中提到的,我现在可以通过将 case 语句也添加到 group by 来运行我的代码。 我现在的新问题是:我有几个 case 语句,因此为我的数据集创建了几个新列。由于我必须在 group by 语句中包含所有变量(不是总和、计数等),因此我将所有 case 语句添加到 group by。但是现在线条加倍了,这是我不想要的。 例如
select
a.variable1,case when b.variable5 = 'K' and b.variable6 < b.variable7 then b.variable6 end as variable_new,case when b.variable5 = 'K' and b.variable8 >= b.variable9 then b.variable6 end as variable_new_2
from table1 a
left join table2 b
on
a.id=b.id
where
a.variable5 = 'X'
group by
a.variable1,case when b.variable5 = 'K' and b.variable6 < b.variable7 then b.variable6 end,case when b.variable5 = 'K' and b.variable8 >= b.variable9 then b.variable8 end
);
disconnect from oracle;
结果是这样的
variable1 variable2 variable3 variable4 variable_new variable_new_2
1 variable6 .
1 . variable8
而不是像这样的一行
variable1 variable2 variable3 variable4 variable_new variable_new_2
1 variable6 variable8
如何将数据分组?
解决方法
我不知道是否可以在您使用的内容中使用 CASE
。
但是,您的似乎无效(至少对我而言)。
case
when b.variable5 = 'K' and b.variable6 < b.variable7 then b.variable6
else . --> here
end as variable_new
else .
?那是什么?如果你不知道该怎么做“其他”,那么就
case
when b.variable5 = 'K' and b.variable6 < b.variable7 then b.variable6
end as variable_new
看看是否有帮助。
截至 GROUP BY
期:
GROUP BY
与聚合一起使用;它必须包含所有非聚合列。您的查询根本没有聚合任何内容,因此 - 而不是 GROUP BY
,您可以 - 并且应该 - 使用 DISTINCT 代替:
select DISTINCT --> DISTINCT here
a.variable1,a.variable2,a.variable3,b.variable4,case when ...
from ...
where
a.variable5 = 'X'
--> no GROUP BY here!
,
使用句点表示缺失值是 SAS 语法。在 Oracle 中,您可能希望改用关键字 NULL。
,case when b.variable5 = 'K' and b.variable6 < b.variable7 then b.variable6
else null
end as variable_new
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。