【问题标题】:SAS Same column selection multiple times using multiple where clause as different output columnsSAS使用多个where子句作为不同的输出列多次选择相同的列
【发布时间】:2020-10-30 14:31:37
【问题描述】:

我有一个正在创建的临时表,我们会说第 1 列是 YearMonth,第 2 列是 user_id,第 3 列是 flag1,第 4 列是 flag。

YearMonth User_id Flag1 Flag2 200101 1 N N 200101 2 N N 200101 3 是 否

我想根据标志最小 YearMonth。

所以例如当 flag1=N 然后为每个用户 ID 获取最少的 YearMonth,同样的方式为 flag2=N 然后为每个用户 ID 获取最少的 YearMonth。 注意:这里,如果 Flag1 为 N,那么 Flag2 将始终为 N,但 Flag2 的用户 ID 可能比 Flag1 多。

我是 SAS 新手,当我尝试使用下面的 case 语句时:

   SELECT distinct t1.userid,
      case when t1.flag1='N' then MIN(t1.YearMonth) end as YearMonth1,
      case when t1.flag2='N' then MIN(t1.YearMonth) end as YearMonth2
   FROM WORK.table t1
   GROUP BY 1;

我想知道为什么它不会产生如下输出:

用户 ID 年月 1 年月 2 1 202001 202001 2 202001 202001 3 202001

我在这里缺少什么?谢谢

【问题讨论】:

  • userid 来自哪里?它不在您的示例数据中。
  • 我改了。我错误地输入了order_id。谢谢

标签: sas proc-sql


【解决方案1】:

认为您只需要条件聚合。 CASE 表达式是 MIN() 的参数:

SELECT t1.userid,
       MIN(CASE WHEN t1.flag1 = 'N' THEN t1.YearMonth END) end as YearMonth1,
       MIN(CASE WHEN t1.flag2 = 'N' THEN t1.YearMonth END) end as YearMonth2
FROM t1
GROUP BY t1.userid

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    相关资源
    最近更新 更多