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

SAS如何按POLICY_Vintage分组计算同组相邻Run_date的保单数量差值

SAS分组计算相邻日期保单数差值修正代码

逻辑调整说明

要实现同POLICY_Vintage分组内相邻Run_date的number_policy差值计算,核心要规避跨分组取值问题,修正逻辑如下:

  • 拼接历史数据后必须保证按policy_vintage、run_date升序排序
  • 每个分组的第一条观测没有上一期数据,差值直接设为缺失
  • 非第一条观测直接用当期值减上一期滞后值即可,不需要限制仅最后一条输出差值

完整可运行代码

/* 计算当期各vintage的保单数 */
proc sql;   
create table policy_vintage_weekly as
  select 
    policy_vintage
    ,count(NRB) as number_policy
    ,today() as Run_Date format weeku.
  from PolisyEnd
  where POLIS= "W"
  group by policy_vintage
;
quit;

/* 拼接历史数据+当期数据,按分组和日期排序 */
data policy_vintage_weekly_all;
set
  _work.policy_vintage_weekly (where=(run_date ne today()))
  policy_vintage_weekly
;
by policy_vintage run_date;
run;

%if &syscc. = 0
%then %do;
/* 分组计算差值 */
data _work.policy_vintage_weekly;
set policy_vintage_weekly_all;
by policy_vintage run_date;
/* 分组第一行无上期,差值为空;其余行用当期减上期值 */
if first.policy_vintage then diff_value = .;
else diff_value = number_policy - lag(number_policy);
run;
%end;

/* 输出报告 */
proc print data=_work.policy_vintage_weekly noobs;
var policy_vintage number_policy run_date diff_value;
run;

关键逻辑说明

  • lag(number_policy)会返回上一条观测的number_policy值,配合first.policy_vintage判定,保证不会读取上一个分组的数值
  • 排序步骤必须包含run_date,避免出现日期倒序导致差值计算错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:57:03