SAS使用多个where子句作为不同的输出列多次选择相同的列
SAS Same column selection multiple times using multiple where clause as different output columns
我有一个正在创建的临时 table,我们会说第 1 列是 YearMonth,第 2 列是 user_id,第 3 列是 flag1,第 4 列是 flag。
YearMonth User_id Flag1 Flag2
200101 1 N N
200101 2 N N
200101 3 Y N
我想根据标志最小化 YearMonth。
例如当 flag1=N 然后为每个 userid 获取最少的 YearMonth,对于 flag2=N 则以相同的方式为每个 userid 获取最少的 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;
我想知道为什么它不会产生如下输出:
Userid YearMonth1 Yearmonth2
1 202001 202001
2 202001 202001
3 202001
我在这里错过了什么?谢谢
我认为您只需要条件聚合。 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
我有一个正在创建的临时 table,我们会说第 1 列是 YearMonth,第 2 列是 user_id,第 3 列是 flag1,第 4 列是 flag。
YearMonth User_id Flag1 Flag2 200101 1 N N 200101 2 N N 200101 3 Y N
我想根据标志最小化 YearMonth。
例如当 flag1=N 然后为每个 userid 获取最少的 YearMonth,对于 flag2=N 则以相同的方式为每个 userid 获取最少的 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;
我想知道为什么它不会产生如下输出:
Userid YearMonth1 Yearmonth2 1 202001 202001 2 202001 202001 3 202001
我在这里错过了什么?谢谢
我认为您只需要条件聚合。 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