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

基于两日期差值外推销售数据并调整列值的技术实现需求

按日期线性外推季度月初始销售数据并拼接原表

原始数据

我有某季度每月初的销售数据,以2022年第一季度为例,包含1月1日、2月1日、3月1日的销售记录,具体数据如下:

DateCountryRegionSales
01/01/2022UKEMEA100,000
02/01/2022UKEMEA170,000
03/01/2022UKEMEA120,000
01/01/2022USAMS90,000
02/01/2022USAMS110,000
03/01/2022USAMS160,000

需求说明

需要基于相邻两个月初的日期差值,线性外推这两个日期之间每天的销售额,最终将外推结果与原表拼接。具体规则:

  • 以1月1日到2月1日区间为例:计算两日期差为31天,1月2日销售额 = 1月1日销售额 + (2月1日销售额 - 1月1日销售额) * (1/31);1月3日按(2/31)比例递增,以此类推直到1月31日。
  • 进入下一个区间(如2月1日到3月1日)时,重新计算该区间的日期总天数,再按相同的线性比例规则外推每日销售额。

解决方案(SAS实现)

以下是SAS代码实现,完成数据读取、外推计算与合并:

/* 1. 读取原始数据,处理日期和数值格式 */
data sales_initial;
    infile datalines dlm='|' dsd truncover;
    input Date : mmddyy10. Country $ Region $ Sales : comma10.;
    format Date date9.;
    datalines;
01/01/2022|UK|EMEA|100,000
02/01/2022|UK|EMEA|170,000
03/01/2022|UK|EMEA|120,000
01/01/2022|US|AMS|90,000
02/01/2022|US|AMS|110,000
03/01/2022|US|AMS|160,000
;
run;

/* 2. 按Country、Region分组,排序并获取相邻日期的信息 */
data sales_with_next;
    set sales_initial;
    by Country Region Date;
    /* 获取下一行的日期和销售额 */
    next_date = lead(Date);
    next_sales = lead(Sales);
    /* 计算当前区间的总天数 */
    interval_days = intck('day', Date, next_date);
    /* 只保留非最后一行的记录(最后一行没有后续日期,无需外推) */
    if not(last.bygroup);
run;

/* 3. 生成区间内的每日日期,并计算外推销售额 */
data sales_extrapolated;
    set sales_with_next;
    /* 生成从当前日期+1天到next_date-1天的所有日期 */
    do day_offset = 1 to interval_days - 1;
        current_date = intnx('day', Date, day_offset);
        /* 线性外推计算销售额 */
        extrapolated_sales = Sales + (next_sales - Sales) * (day_offset / interval_days);
        /* 保留维度字段,输出外推记录 */
        output;
    end;
    format current_date date9.;
    keep Country Region current_date extrapolated_sales;
    rename current_date=Date extrapolated_sales=Sales;
run;

/* 4. 合并原始数据和外推数据,按日期、国家、地区排序 */
data final_sales;
    set sales_initial sales_extrapolated;
    by Country Region Date;
run;

/* 查看结果 */
proc print data=final_sales(obs=30) noobs;
    var Date Country Region Sales;
    format Sales comma12.2;
run;

代码说明

  • 第一步读取原始数据,将Date转为SAS日期格式,Sales转为数值型(去除逗号)。
  • 第二步通过lead()函数获取每组内下一个月初的日期和销售额,计算区间总天数。
  • 第三步用循环生成区间内的每日日期,按线性比例计算外推销售额。
  • 最后合并原始数据与外推数据,得到包含每日销售额的完整表格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:45:35