首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Proc SQL中使用IIF

在Proc SQL中使用IIF
EN

Stack Overflow用户
提问于 2019-01-29 04:09:34
回答 2查看 322关注 0票数 0

我想翻译以下用于SASProc SQL中的代码片段:

SUM( IIF( INLIST( a.Department, DptGI, DptOncology, DptSurgery ), 1, 0 )) as TotalApts,;

但是,PROC SQL不能识别IIF()

我能实现一个if/else或某种CASE语句吗?

这些对我来说似乎都不管用。

EN

回答 2

Stack Overflow用户

发布于 2019-01-29 07:56:04

IIF()不是SQL函数。它可能是在SQL的某些版本中作为扩展实现的函数,很可能是由微软创建的那些版本。

我也不确定INLIST()是什么。我假设这是对第一个参数是否在其他参数中的某种类型的测试。如果是这样,您可以将其替换为SAS函数WHICHN()WHICHC()之一,具体取决于变量中的值是数字还是字符串。

该类型操作的正常SQL语法是CASE

代码语言:javascript
代码运行次数:0
运行
复制
SUM( case when ( a.Department= DptGI) then 1
          when ( a.Department=DptOncology) then 1
          when ( a.Department=DptSurgery ) then 1
      else 0 end
    ) as TotalApts

如果您只想得到1或0的结果,并且您可以使用SAS特定的语法,那么您可以只对布尔表达式的结果求和。

代码语言:javascript
代码运行次数:0
运行
复制
SUM( (a.Department=DptGI) or (a.Department=DptOncology)
     or (a.Department=DptSurgery)) as TotalApts

现在,如果DPTGI和其他值是常量而不是变量,那么您可以使用IN运算符。

代码语言:javascript
代码运行次数:0
运行
复制
SUM(a.Department in ('GI','Oncology','Surgery')) as TotalApts
票数 1
EN

Stack Overflow用户

发布于 2019-01-29 04:19:40

IIF的SAS版本是IFN or IFC,这取决于数字或字符返回值(输入列是什么并不重要,只是您想要返回的列)。只要您在原生SAS PROC SQL (而不是直通式SQL)中使用它,它就应该可以工作。

然而,INLIST也不是一个SAS函数,你也必须把它重写成一个普通的in运算符。

您也应该能够使用case when语句,但是,如果您需要有关这些语句的帮助,可以发布您尝试过的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54409548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档