【问题标题】:Marking full weeks inside a month including remaining days from other months标记一个月内的整周,包括其他月份的剩余天数
【发布时间】:2017-06-27 22:06:29
【问题描述】:

我有一个包含每日数据的数据集。我需要创建一个变量来表示每个月的周数(1 到(4 或 5))。

我通过以下公式达到了这一点:

 WK_NUM = intck('week',intnx('month',DATE,0),DATE)+1;

它运行良好,但通常每个月的第一周和最后几周都不是完整的周,因此该行只包含部分周。我需要对其进行改进,以将上个月或下个月的剩余天数带入每周 7 天。

有什么想法吗?

【问题讨论】:

  • 你能展示一下你的开始和你需要什么作为输出吗?
  • 我的数据库涵盖了 JAN15 直到今天。让我们以 MAY2017 为例。每个日期我都有多行数据,字段 DATE 包含它的完整日期(MAY01 到 MAY31)。我想创建一个名为 WK_NUM 的变量,它按周(第 1 到第 5 天)对这些天进行分组。我目前的公式可以做到,但我的第一周涵盖 MAY01 至 MAY06(6 天),而我的最后一周涵盖 MAY28 至 MAY31(4 天)。在这些情况下,我希望它从上个月/下个月获得更多的天数,以填补整个 7 天的一周(从星期日到星期六),例如 APR30 到 MAY06(第一周)和 MAY28 到 JUN03(上周)。
  • 请将该文本添加到问题中。或者更好的是,添加到问题中以显示您拥有的数据的一些示例记录,并显示您希望从该示例中获得的输出数据。
  • @AYJK 如前所述,请将其添加到问题中。还包括当您查看下个月时如何处理它?所以 6 月 1 日是第 5 周?您是否尝试过 WEEK 函数/格式的变体?

标签: date sas week-number


【解决方案1】:

希望这会产生预期的结果:

/* initial data set with dates */
data a;
  format date date9.;
  do date="15apr2017"d to "15jun2017"d;
   output;
  end;
 run;

/* adding week number */
data a;
  set a;
  wk_num = week(date,'u');
run;

/* selecting May and modifying wk_num */
proc sql noprint;
  CREATE TABLE b AS
  SELECT date
    ,wk_num - ((SELECT min(wk_num) FROM a WHERE date="01may2017"d)-1)
  FROM a
  WHERE wk_num between (SELECT min(wk_num) FROM a WHERE date="01may2017"d) AND (SELECT max(wk_num) FROM a WHERE date="31may2017"d)
  ;
quit;

星期功能选项:

u(默认):指定一年中的周数。星期日被认为是一周的第一天。周数值表示为 0-53 范围内的十进制数。第 53 周没有特殊意义。 week('31dec2006'd, 'u') 的值为 53。

v:指定周数,其值表示为 1-53 范围内的十进制数。星期一被认为是一周的第一天,一年中的第一周是包括 1 月 4 日和一年中的第一个星期四的一周。如果 1 月的第一个星期一是第 2 日、第 3 日或第 4 日,则前几天是前一年最后一周的一部分。

w:指定一年中的周数。星期一被认为是一周的第一天。周数值表示为 0-53 范围内的十进制数。第 53 周没有特殊意义。 week('31dec2006'd, 'w') 的值为 53。

【讨论】:

  • 谢谢@zuluk,它就像我想要的那样工作!干杯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
相关资源
最近更新 更多