我想将以下代码段转换为0
用在Proc SQL
中:
SAS
但是SUM( IIF( INLIST( a.Department, DptGI, DptOncology, DptSurgery ), 1, 0 )) as TotalApts,;
无法识别IIF()
。
我可以实现PROC SQL
还是某种if/else
语句吗?
似乎没有一个对我有用。
答案 0 :(得分:1)
IIF()
不是SQL
函数。该功能可能是在SQL
的某些版本中作为扩展实现的,很可能是由Microsoft创建的。
我不确定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
答案 1 :(得分:0)
IIF
的SAS版本为IFN
or IFC
,具体取决于数字或字符返回值(无论输入列是什么,只要返回就可以了) 。只要您在本机SAS PROC SQL(而不是直通SQL)中使用它,它就应该起作用。
但是,INLIST
也不是SAS函数,您还必须将其重写为普通的in
运算符。
您也应该也可以使用case when
语句,但是,如果您希望获得帮助,可以发布您尝试过的代码。