You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PROC SQL的CASE语句跨行检查多变量条件?

PROC SQL实现同ID跨记录的条件判断

你可以通过关联子查询或者窗口函数实现需求,无需拆分表,直接在单条SELECT语句中完成逻辑判断:

方案1:关联子查询

利用EXISTS子查询检查同ID下是否存在符合条件的type=A记录:

PROC SQL;
    SELECT 
        t.ID,
        t.year,
        t.type,
        CASE 
            WHEN t.type = 'B' AND t.year = 2024 
                 AND EXISTS (
                     SELECT 1 
                     FROM your_table AS sub
                     WHERE sub.ID = t.ID 
                           AND sub.type = 'A' 
                           AND sub.year <= 2024
                 ) THEN 'TRUE'
            ELSE 'FALSE'
        END AS result
    FROM your_table AS t;
QUIT;

逻辑说明:

  • 先判断当前记录是否为type='B'且year=2024
  • 通过关联子查询,校验同ID下是否存在type='A'且year≤2024的记录
  • 两个条件同时满足时返回TRUE,否则返回FALSE

方案2:窗口函数

通过窗口函数提前计算每个ID下type=A的最大年份,再进行判断:

PROC SQL;
    SELECT 
        ID,
        year,
        type,
        CASE 
            WHEN type = 'B' AND year = 2024 
                 AND MAX(CASE WHEN type = 'A' THEN year ELSE . END) OVER(PARTITION BY ID) <= 2024
            THEN 'TRUE'
            ELSE 'FALSE'
        END AS result
    FROM your_table;
QUIT;

逻辑说明:

  • MAX(CASE WHEN type='A' THEN year ELSE . END) OVER(PARTITION BY ID):按ID分组,计算该组内所有type=A记录的最大年份(无type=A记录时返回缺失值)
  • 结合当前记录的type='B'且year=2024条件,若最大年份≤2024则返回TRUE,否则返回FALSE

针对你的样本数据,两种方案都会返回TRUE,因为ID=1下存在type=A的2023年记录,且有符合条件的type=B/2024记录。

内容的提问来源于stack exchange,提问作者SAS Newbie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 05:16:12