我想翻译以下用于SAS
的Proc SQL
中的代码片段:
SUM( IIF( INLIST( a.Department, DptGI, DptOncology, DptSurgery ), 1, 0 )) as TotalApts,;
但是,PROC SQL
不能识别IIF()
。
我能实现一个if/else
或某种CASE
语句吗?
这些对我来说似乎都不管用。
发布于 2019-01-29 07:56:04
IIF()
不是SQL
函数。它可能是在SQL
的某些版本中作为扩展实现的函数,很可能是由微软创建的那些版本。
我也不确定INLIST()
是什么。我假设这是对第一个参数是否在其他参数中的某种类型的测试。如果是这样,您可以将其替换为SAS函数WHICHN()
或WHICHC()
之一,具体取决于变量中的值是数字还是字符串。
该类型操作的正常SQL
语法是CASE
。
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特定的语法,那么您可以只对布尔表达式的结果求和。
SUM( (a.Department=DptGI) or (a.Department=DptOncology)
or (a.Department=DptSurgery)) as TotalApts
现在,如果DPTGI
和其他值是常量而不是变量,那么您可以使用IN
运算符。
SUM(a.Department in ('GI','Oncology','Surgery')) as TotalApts
发布于 2019-01-29 04:19:40
IIF
的SAS版本是IFN
or IFC
,这取决于数字或字符返回值(输入列是什么并不重要,只是您想要返回的列)。只要您在原生SAS PROC SQL (而不是直通式SQL)中使用它,它就应该可以工作。
然而,INLIST
也不是一个SAS函数,你也必须把它重写成一个普通的in
运算符。
您也应该能够使用case when
语句,但是,如果您需要有关这些语句的帮助,可以发布您尝试过的代码。
https://stackoverflow.com/questions/54409548
复制相似问题