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

在SAS中如何实现两类自定义衍生字段的生成需求?

SAS 需求实现代码

需求一:当test2字段值为0时新增test4列

当test2字段值为0时,基于test3字段生成test4列(示例逻辑为直接取test3的值,可根据实际需求调整计算规则):

data want1;
    set have;
    if test2 = 0 then test4 = test3;
    /* 若需给test2≠0的行设置test4值,可添加else语句,例如:else test4 = .; */
run;

需求二:按分组规则生成Amt_H列并过滤行

输入数据集示例

先创建题目给出的输入数据集:

data input_data;
    input Tl $ LineNo Amnt_pd;
    datalines;
01      0     .
01      1     93
01      2     0
01      3     25
01      4      0
02      0     40
02      1     0
;
run;

实现代码(PROC SQL版)

通过分组计算基准值,再关联原数据生成结果:

proc sql;
    create table output_data as
    select 
        i.Tl,
        i.LineNo,
        i.Amnt_pd,
        case 
            when base.base_amt is not missing then base.base_amt
            else base.sum_amt
        end as Amt_H
    from input_data i
    left join (
        select 
            Tl,
            max(case when LineNo=0 then Amnt_pd else . end) as base_amt,
            sum(case when LineNo ne 0 then Amnt_pd else 0 end) as sum_amt
        from input_data
        group by Tl
    ) base on i.Tl = base.Tl
    where i.LineNo ne 0
    order by i.Tl, i.LineNo;
quit;

代码说明

  • 子查询base按Tl分组,计算两个核心值:
    • base_amt:分组内LineNo=0对应的Amnt_pd值(非缺失则保留,缺失则为缺失值)
    • sum_amt:分组内所有LineNo≠0行的Amnt_pd求和结果
  • 主查询通过case逻辑判断:若base_amt非缺失则取该值,否则取sum_amt作为Amt_H
  • 最后过滤掉LineNo=0的行,按Tl和LineNo排序

替代实现(DATA步版)

若习惯用DATA步处理分组逻辑,可按以下方式实现:

/* 第一步:计算每个分组的基准值 */
data group_info;
    set input_data;
    by Tl;
    retain base_amt sum_amt 0;
    if first.Tl then do;
        base_amt = .;
        sum_amt = 0;
    end;
    if LineNo=0 then base_amt = Amnt_pd;
    else sum_amt + Amnt_pd;
    if last.Tl then output;
    keep Tl base_amt sum_amt;
run;

/* 第二步:合并数据并生成结果 */
data output_data;
    merge input_data group_info;
    by Tl;
    if LineNo ne 0 then do;
        Amt_H = coalesce(base_amt, sum_amt);
        output;
    end;
    drop base_amt sum_amt;
run;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 08:35:16