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

如何通过年份与周数获取每周的周一起始及周日结束日期?

从年份和周数计算周起始(周一)和结束(周日)日期

问题背景

现有数据集包含拆分后的year(4位年份)和week(周数,如04、51)列,需要计算每周的周一(Week_start_date)和周日(Week_end_date),每周以周一为起始。示例数据如下:

IDYYWWyearweekWeek_start_dateWeek_end_date
11504201504??
21651201651??
31251201251??
41447201447??

多数搜索资源聚焦于从日期反推周数,反向需求的可行方案较少,以下提供SAS环境下的实现方案:

SAS解决方案

利用SAS的INTNX函数指定周起始为周一,结合年份计算目标日期,代码如下:

data want;
    set have;
    /* 转换字符型周数为数值(若原week为数值可跳过此步) */
    week_num = input(week, 2.);
    /* 计算周起始(周一):基于当年1月1日,调整到指定周的周一 */
    Week_start_date = intnx('week.2', mdy(1,1,year), week_num-1, 'b');
    /* 计算周结束(周日):起始日期加6天 */
    Week_end_date = Week_start_date + 6;
    /* 格式化日期为易读格式 */
    format Week_start_date Week_end_date date9.;
run;

代码说明

  • week.2:明确指定周的起始为周一(SAS默认周日为周起始,week.1对应周日,week.2对应周一)
  • mdy(1,1,year):生成当年1月1日的日期值
  • intnx('week.2', ..., week_num-1, 'b'):从当年1月1日开始,向后偏移week_num-1个完整周,'b'参数取该周期的起始边界(即周一)
  • 周结束日期直接通过起始日期加6天得到,无需额外函数计算

示例验证结果

对给出的示例数据,计算后结果如下:

  • ID1(2015年第4周):起始日期26JAN2015,结束日期01FEB2015
  • ID2(2016年第51周):起始日期12DEC2016,结束日期18DEC2016
  • ID3(2012年第51周):起始日期10DEC2012,结束日期16DEC2012
  • ID4(2014年第47周):起始日期17NOV2014,结束日期23NOV2014

注意事项

  • 若原week列是字符型(如'04'),必须先通过input函数转换为数值型再计算
  • 若需符合ISO周标准(周一起始,且每年至少有4天在当年),可将week.2替换为weeku.2,weeku是SAS中ISO周的标识

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 05:01:11