簡體   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