【问题标题】:Proc SQL: CASE WHEN nestedProc SQL:嵌套时的情况
【发布时间】:2018-03-19 04:41:41
【问题描述】:

在 Proc sql 中使用嵌套大小写,我需要根据指定的年份和月份获取列的值。例如 - 如果年份是 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

【问题讨论】:

    标签: sql nested sas case proc-sql


    【解决方案1】:

    您可以使用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
    

    【讨论】:

      猜你喜欢
      • 2020-02-25
      • 2019-06-08
      • 1970-01-01
      • 1970-01-01
      • 2011-01-09
      • 2012-03-01
      • 1970-01-01
      • 2023-01-28
      • 1970-01-01
      相关资源
      最近更新 更多