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

如何在SAS中将同Product_ID的Type列值合并至单行描述字段?

SAS数据集合并Type至Description字段的实现方案

针对需求:将同一Product_ID对应的Type列值合并后添加到Description字段的括号内,且同一Product_ID的Description内容一致,以下提供两种可行实现方法:

方法一:使用PROC SQL实现

该方法通过分组聚合直接完成字符串拼接,代码简洁高效:

/* 假设原数据集名为input_data,目标数据集名为output_data */
PROC SQL;
    CREATE TABLE output_data AS
    SELECT 
        Product_ID,
        CATX(' ', Description, '(', CATX(', ', COLLECT(Type)), ')') AS Description
    FROM input_data
    GROUP BY Product_ID, Description;
QUIT;

代码说明

  • COLLECT(Type):将同一分组内的Type值收集为一个列表
  • CATX(', ', COLLECT(Type)):把列表转换为逗号分隔的字符串
  • CATX(' ', Description, '(', ..., ')'):将原始描述与括号包裹的Type字符串拼接
  • GROUP BY Product_ID, Description:确保同一Product_ID且描述一致的记录合并为一条

方法二:使用DATA步实现

该方法通过排序+保留变量的方式逐步合并Type,逻辑清晰直观:

/* 先按Product_ID和Description排序,确保分组顺序正确 */
PROC SORT DATA=input_data;
    BY Product_ID Description;
RUN;

/* 合并Type并生成目标数据集 */
DATA output_data;
    SET input_data;
    BY Product_ID Description;
    RETAIN types; /* 保留变量值跨行传递 */
    
    /* 初始化当前Product_ID的Type集合 */
    IF FIRST.Product_ID THEN types = Type;
    /* 后续记录追加Type到集合 */
    ELSE types = CATX(', ', types, Type);
    
    /* 仅保留每个Product_ID的最后一条记录,完成描述拼接后输出 */
    IF LAST.Product_ID THEN DO;
        Description = CATX(' ', Description, '(', types, ')');
        OUTPUT;
    END;
    
    DROP types Type; /* 删除中间变量 */
RUN;

代码说明

  • RETAIN types:让types变量的值在数据步循环中保留,不自动重置为缺失
  • FIRST.Product_ID/LAST.Product_ID:识别每个Product_ID分组的第一条和最后一条记录
  • 最后仅输出分组的最后一条记录,确保每个Product_ID只保留一条合并后的结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:38:16