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

如何使用SAS去除分组内连续重复记录并保留日期最新的最后一条

SAS 4GL实现分组内连续重复记录取最后一条方案

完全可以用SAS 4GL实现该需求,不需要复杂排序,核心是利用by语句的notsorted选项识别连续重复块,具体实现如下:

核心逻辑说明

之前用first./last.变量没得到正确结果,核心问题是直接按id value分组时,SAS会把同id下所有value相同的记录归为一组,不管中间是否被其他值分隔,会把不连续的同value记录错误合并。
正确思路不需要打乱原有按id + dt升序的排列(连续重复的判断本身就依赖日期顺序),只需要识别同id下连续value相同的片段(连续块),每个连续块保留最后一条即可。

实现代码

/* 直接筛选出需要保留的记录 */
data result;
    set example;
    /* notsorted选项:按数据现有顺序识别连续相同的id+value分组,不要求全局按value排序 */
    by id value notsorted;
    /* 每个连续块的最后一条就是需要保留的记录 */
    if last.value then output;
run;

/* 如果需要生成0/1标记列,可以用以下代码 */
data want_marked;
    set example;
    by id value notsorted;
    WANT_TO_SELECT = last.value;
run;

结果验证

针对提供的示例数据,运行上述代码后保留的记录如下,完全匹配需求:

  • id=10分组:dt=1的500(单条连续块保留)、dt=4的750(连续3条750的最后一条)、dt=5的500(和前一个500不连续,单条块保留)
  • id=20分组:dt=2的150(连续2条150的最后一条)、dt=3的370(单条块保留)、dt=4的150(和前一个150不连续,单条块保留)

注:示例数据中WANT_TO_SELECT列的赋值和文字描述的需求存在偏差,以上结果完全匹配文字说明的保留规则。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 09:39:57