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

如何在SAS Enterprise Guide的PROC SQL中给ID标记特定列变更状态

在SAS PROC SQL中生成标记列col1的实现方案

需求说明

现有如下数据集:

IDval1val2
123MM
123MP
123PP
444PRPR
444PRPR
567PRM
567MM
99PRP

需要新增列col1,规则为:

  • 若某一ID从未出现val1='PR'且val2为'M'或'P'的记录,则该ID所有行的col1值为1
  • 只要该ID存在符合上述条件的记录,则所有行的col1值为0

期望输出结果:

IDval1val2col1
123MM1
123MP1
123PP1
444PRPR1
444PRPR1
567PRM0
567MM0
99PRP0

PROC SQL实现代码

PROC SQL;
    CREATE TABLE desired_result AS
    SELECT 
        t1.ID,
        t1.val1,
        t1.val2,
        CASE 
            WHEN t2.has_invalid = 0 THEN 1
            ELSE 0
        END AS col1
    FROM original_table t1
    LEFT JOIN (
        SELECT 
            ID,
            MAX(CASE WHEN val1 = 'PR' AND val2 IN ('M', 'P') THEN 1 ELSE 0 END) AS has_invalid
        FROM original_table
        GROUP BY ID
    ) t2 ON t1.ID = t2.ID;
QUIT;

代码逻辑解释

  1. 子查询t2:
    • 按ID分组,对每个ID检查是否存在val1='PR'且val2为M/P的记录
    • 用MAX()函数:只要该ID有一条符合条件的记录,has_invalid就会被标记为1;若完全没有则为0
  2. 主查询:
    • 将原表t1与子查询结果t2通过ID关联
    • 用CASE语句转换标记:当has_invalid=0时col1=1,否则为0,完全匹配需求规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:40:31