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

如何创建以周四为起始日的SAS自定义周格式?

自定义SAS周格式(周四为周起始)

由于SAS默认的周格式(U/V/W描述符)仅支持周一或周日作为周起始,要实现周四为起始的自定义周格式,需要手动计算周归属并创建格式,具体步骤如下:

核心思路

通过调整日期偏移,将每个日期映射到其所属周四起始周的基准日,再基于基准日计算年份和周数,最后封装为可复用的格式或函数。

步骤1:计算自定义周的年份与周数

在数据步中通过日期偏移调整和周数计算,得到每个日期对应的周四起始周标识:

data demo;
  input date date9.;
  format date date9.;
  
  /* 计算日期相对于周四的偏移:周四是weekday返回5,偏移量为当前日期到所属周周四的天数 */
  offset = weekday(date) - 5;
  if offset > 0 then offset = offset - 7; /* 周五到下周三的日期,调整到当前周的周四 */
  
  /* 得到该日期所属周四起始周的基准日(周四) */
  week_start_thu = date - offset;
  
  /* 计算基准日所在的年份和周数 */
  week_year = year(week_start_thu);
  week_num = intck('week', mdy(1,1,week_year), week_start_thu) + 1;
  
  /* 修正跨年边界情况:12月的基准日可能属于下一年第一周,1月的可能属于上一年最后一周 */
  if month(week_start_thu) = 12 and week_num = 1 then week_year = week_year + 1;
  if month(week_start_thu) = 1 and week_num > 50 then week_year = week_year - 1;
  
  /* 生成标准周标识(如2024W01) */
  custom_week = cats(week_year, 'W', put(week_num, z2.));
  datalines;
01JAN2024
04JAN2024
05JAN2024
31DEC2023
;
run;

步骤2:创建可复用的自定义格式

如果需要直接通过put()函数调用自定义周格式,可结合FCMP自定义函数实现:

/* 创建自定义函数,封装周计算逻辑 */
proc fcmp outlib=work.userfuncs.dateutils;
  function thu_start_week(date) $;
    offset = weekday(date) - 5;
    if offset > 0 then offset = offset - 7;
    week_start_thu = date - offset;
    
    week_year = year(week_start_thu);
    week_num = intck('week', mdy(1,1,week_year), week_start_thu) + 1;
    
    if month(week_start_thu) = 12 and week_num = 1 then week_year = week_year + 1;
    if month(week_start_thu) = 1 and week_num > 50 then week_year = week_year - 1;
    
    return(cats(week_year, 'W', put(week_num, z2.)));
  endsub;
run;

/* 启用自定义函数库 */
options cmplib=work.userfuncs;

/* 直接调用函数生成自定义周格式 */
data test;
  input date date9.;
  format date date9.;
  custom_week = thu_start_week(date);
  datalines;
10JAN2024
25DEC2023
01FEB2024
;
run;

关键说明

  • weekday()函数:返回1(周日)到7(周六),周四对应5,以此计算偏移量
  • 边界处理:必须修正跨年时的周数归属,避免出现2023W53或2024W01的错误映射
  • 复用性:通过FCMP函数封装逻辑后,可在任意数据步中直接调用,无需重复编写计算代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 11:35:33