首页 > 解决方案 > 在 Proc SQL 中使用 IIF

问题描述

我想翻译以下代码片段以用于Proc SQLfor SAS

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

但是IIF()不被PROC SQL.

我可以执行一个if/else或某种CASE声明吗?

这些似乎都不适合我。

标签: sas

解决方案


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

推荐阅读