在Proc SQL中使用IIF

时间:2019-01-28 20:09:34

标签: sas

我想将以下代码段转换为0用在Proc SQL中:

SAS

但是SUM( IIF( INLIST( a.Department, DptGI, DptOncology, DptSurgery ), 1, 0 )) as TotalApts,;无法识别IIF()

我可以实现PROC SQL还是某种if/else语句吗?

似乎没有一个对我有用。

2 个答案:

答案 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语句,但是,如果您希望获得帮助,可以发布您尝试过的代码。