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

如何在含5000条swap spread日度数据集中保留每月最后工作日?

解决方案:提取数据集每月最后一个工作日记录

问题背景

拥有约5000条swap spread日度收益率的数据集,需保留每个月份实际存在的最后一个工作日记录,原代码if date~=(intx('month',date,-1)+1) then delete;存在日期遗漏问题。

原代码问题分析

原代码试图通过日历当月最后一天筛选,但intx('month',date,-1)+1逻辑错误,即便修正为intnx('month', date, 0, 'e')(日历月末),也无法适配“数据中实际存在的最后工作日”——若月末为周末/节假日,数据中无该日期,就会误删真实的最后工作日记录。

有效解决方案

方法1:SAS BY组处理(推荐)

利用SAS的BY分组特性,直接取每个月组的最后一条记录:

/* 先确保数据按日期升序排序 */
proc sort data=your_raw_data;
    by date;
run;

/* 提取每月最后一条记录 */
data last_workday_month;
    set your_raw_data;
    /* 按年-月分组 */
    by year(date) month(date);
    /* 保留每个月组的最后一条观测 */
    if last.month;
run;
  • 逻辑:year(date)和month(date)将数据按年、月分组,last.month标记每个月组的最后一条记录,即该月数据中最晚的日期(实际存在的最后工作日)。

方法2:PROC SQL分组筛选

通过子查询找出每个月的最大日期,再匹配原数据:

proc sql;
    create table last_workday_month as
    select *
    from your_raw_data
    where (year(date), month(date), date) in (
        /* 子查询获取每个月的最大日期 */
        select year(date), month(date), max(date)
        from your_raw_data
        group by year(date), month(date)
    );
quit;
  • 逻辑:子查询按年-月分组,得到每个月在数据中存在的最大日期,主查询筛选出对应日期的完整记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 15:48:11