能够识别除周末外的每月第6天的代码



有人能帮帮我吗?

我需要一个代码,可以识别每个月的第6滚动期间不包括周末。我将需要代码发送电子邮件,每次它是超过每个月的6日。

请不要担心邮件部分,我只需要一个可以在SAS中识别每月6号的代码。

例如:如果当月的日期大于6日;那么%

请帮助。

谢谢。

您可以通过查看当天是否大于或等于6号来直接检查日期。如果是周末,那就什么都不要做。

data _null_;         
if(day(today()) GE 6 AND 2 LE weekday(today()) LE 6) put 'It's the after the 6th and not a weekend';
else put 'It's not after the 6th or it's a weekend.';
run;

如果你每个月只需要运行一次邮件,创建一个小的数据库来存储每天发送的邮件。如果那个月发了邮件,那就不要再发了。

%macro send_email;
%let today = %sysfunc(today() );
proc sql noprint;
select intnx('month', max(email_date), 0, 'B')
into :check_date
from lib.email_history
;
quit;
%if(    %sysfunc(intnx(month, &today., 0, B) ) NE &check_date.
AND %sysfunc(day(&today.) ) GE 6 
AND 2 LE %sysfunc(weekday(&today.) ) LE 6
)
%then %do;
/************************/
/* Email code goes here */
/************************/
/* Save a history that an email was sent */
data email_history;
email_date = today();
run;
proc append base=lib.email_history
data=email_history
;
run; 
%end;
%mend;
%send_email;

这里的关键功能是intnx,它允许您跳转到下一个[无论哪一天]。

这里有一个例子,希望能解释这个概念。

data dates;
do date = '01JAN2022'd to '31DEC2022'd;
weekday = date;
is_sixth = (date = intnx('WEEKDAY',intnx('MONTH',date,0)+5-1,0,'e')+1);
output;
end;

format weekday DOWNAME.;
format date date9.;
run;

在这里,我们首先移到月初,然后加上5(有点)。这就得到了"当月的6号"。然后,因为SAS的工作日间隔是对齐的,星期五,星期六,太阳是一个"周期",我们必须减去一个,移动到周期的末尾,然后加上一个。这就得到了第6或更晚的。如果我们不做减法/加法的舞蹈,我们会得到第6或更早的

最新更新