Proc-SQL:嵌套时的情况

Proc-SQL:嵌套时的情况,sql,nested,sas,case,proc-sql,Sql,Nested,Sas,Case,Proc Sql,使用procsql中的嵌套case,我需要根据指定的年份和月份获取列的值。例如,如果年份为2018,月份为12月,则应返回x201811列的值,如果为空,则应返回零。我在下面编写的代码给出了一个语法错误。请提出解决办法 CASE WHEN (( Year(date) = 2018 ) AND ( Month(date) = 12 )) THEN x201811 WHEN x201811 IS NULL THEN 0 ELSE x201811 WHEN ((Year(da

使用procsql中的嵌套case,我需要根据指定的年份和月份获取列的值。例如,如果年份为2018,月份为12月,则应返回x201811列的值,如果为空,则应返回零。我在下面编写的代码给出了一个语法错误。请提出解决办法

CASE  WHEN (( Year(date) = 2018 ) AND ( Month(date) = 12 )) THEN x201811 
     WHEN x201811 IS NULL THEN 0
   ELSE x201811
   WHEN ((Year(date)=2018) AND (Month(Date)=11)) THEN x201810
    WHEN x201810 IS NULL THEN 0
   ELSE x201810

您可以使用
COALESCE
函数使第一个非空值成为指定值

CASE
  WHEN (( Year(date) = 2018 ) AND ( Month(date) = 12 )) 
  THEN coalesce (x201811, 0)

  WHEN ((Year(date)=2018) AND (Month(Date)=11)) 
  THEN coalesce (x201810, 0)

  ELSE coalesce (x201810, 0)
END as got_a_value
另一种方法是嵌套
CASE
语句

CASE
  WHEN (( Year(date) = 2018 ) AND ( Month(date) = 12 )) 
  THEN CASE WHEN x201811 is null then 0 else x201811 end

  WHEN ((Year(date)=2018) AND (Month(Date)=11))
  THEN CASE WHEN x201810 is null then 0 else x201810 end

  ELSE ...
END as got_a_value