繁体   English   中英

如何计算 SAS 中每月第一周的天数。如果我们将星期六视为第一周

[英]How to calculate the number of days of first week of the month in SAS.if we consider Saturday as first week day

我正在使用 intnx function。

date1=intnx('qtr',"01APR2021"d,0,'b');

我正在考虑遵循算法-

1.检查上个月的最后一天是否不是星期五。

2.计算直到星期五出现的天数(当前月份)。

谁能帮我这个?

使用INTNX计算当月的第一天,然后使用WEEKDAY计算第一周的天数。

WEEKDAY function 结果是

             1st-want  1st_want-v2
1 Sunday     1         2
2 Monday     2         3
3 Tuesday    3         4
4 Wednesday  4         5
5 Thursday   5         6
6 Friday     6         7
7 Saturday   7         1

取决于你想要什么,(假设第一个是星期六,你想要 1 还是 7 作为你的结果?)对于 1,你需要执行额外的计算。

例子:

假设 first 是星期六,您希望在第一周结果中保留 7 天。

data have;
  call streaminit (2021);
  do _n_ = 0 to 23;
    date = intnx('month', '01-jan-2019'd, _n_) + rand('integer', 27);
    output;    
  end;
  format date date11.;
run;

data want;
  set have;
  month_1st = intnx('month', date, 0);
  sas_weekday_1st = weekday(month_1st);

  result = sas_weekday_1st;
  result_v2 = mod(sas_weekday_1st,7) + 1;

  format month_1st date11.;
run;

  1. 查找当月的第一天(INTNX() 或 MDY())
  2. 查找本月的第一个星期五 (day=6) (NWKDOM())
  3. 减去

假设提供了月份和年份。

data want;
  year = 2020;
  month = 1;
  start_date = mdy(month, 1, year);
  first_friday = nwkdwom(1, 6, month, year);
  length_week = start_date - first_friday + 1;

  *Toms correction:;
  length_week2 = day(nwkdom(1,6,month(date),year(date));
run;
  

听起来您想知道该月第一个星期五的日期。 因此该月的第一个星期五是该月的一天。

因此,让我们从一个数据集开始,该数据集的月份从一周中的每一天开始。

data example;
  input date :date9.;
  format date date9.;
  dow = weekday(date);
  downame=put(date,downame.-l);
cards;
01OCT2000
01MAY2000
01FEB2000
01MAR2000
01JUN2000
01SEP2000
01JAN2000
;

现在我们可以使用带有 WEEK 间隔的 INTNX() function 来查找第一个星期五的日期。 然后,我们可以使用 DAY() function 来查找该星期五的月份日期,从而找出该月第一周的天数。

要获得第一个星期五,请找到包含该月第二天的周末的星期六,然后减去一个以返回星期五。

data want;
  set example;
  friday = intnx('week',date+1,0,'e')-1 ;
  want = day(friday);
  want_name=put(friday,downame.-l);
  format friday date9.;
run;

结果:

Obs         date    dow    downame         friday    want    want_name

 1     01OCT2000     1     Sunday       06OCT2000      6     Friday
 2     01MAY2000     2     Monday       05MAY2000      5     Friday
 3     01FEB2000     3     Tuesday      04FEB2000      4     Friday
 4     01MAR2000     4     Wednesday    03MAR2000      3     Friday
 5     01JUN2000     5     Thursday     02JUN2000      2     Friday
 6     01SEP2000     6     Friday       01SEP2000      1     Friday
 7     01JAN2000     7     Saturday     07JAN2000      7     Friday

要在一个月中的任何一天执行此操作,请使用具有 MONTH 间隔的 INTNX() function 来查找该月的第一天(并添加一个以查找该月的第二天)。

length_week1=day(intnx('week',intnx('month',date,0,'b')+1,0,'e')-1);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM