ฉันจะใช้ชุดค่าวันที่ที่แตกต่างกันโดยขึ้นอยู่กับวันที่ได้อย่างไร

ฉันต้องการจัดทำรายงานรายวันสำหรับบริษัทของฉันโดยอัตโนมัติ แต่ฉันประสบปัญหาเล็กน้อย รายงานจะได้รับการอัปเดตเฉพาะวันทำการที่ 2 ของแต่ละเดือนเท่านั้น ฉันพบโค้ดบางส่วนบนเว็บไซต์ SAS ซึ่งระบุว่าวันทำการที่ 2 ของเดือนคือวันใด

data scdwrk;
  /* advance date to the first day of the month using the INTNX function */
  second=intnx('month',today(),0);
  /* determine the day of the week using the WEEKDAY function */
  day=weekday(second);
  /* if day=Monday then advance by 1 */
  if day=2 then second+1;
  /* if day=Sunday then advance by 2 */
  else if day=1 then second+2;
  format second date9.;
run ; 

ฉันได้ตั้งค่าสถานะที่เปรียบเทียบวันที่ปัจจุบันกับวันที่จากวันที่สร้างโดยโค้ดชิ้นนี้ ตอนนี้ฉันต้องหาวิธีที่หากโค้ดถูกรันในวันทำการแรกของเดือน มันจะรันชุดตัวแปรวันที่ของแมโครเฉพาะ

%let start_date="&prevmnth;
%let end_date= &endprevmnth;
%let month= &prevyearmnth; 

และเมื่อรันในวันทำการที่ 2 ของเดือน มันจะใช้ชุดตัวแปรวันที่มาโครอีกชุดหนึ่ง (เดือนปฏิทิน)

%let start_date="&currmnth;
%let end_date= &endcurrmnth;
%let month= &curryearmnth;

ความช่วยเหลือใด ๆ เกี่ยวกับเรื่องนี้จะได้รับการชื่นชมอย่างมาก


person Rossco2210    schedule 24.06.2015    source แหล่งที่มา
comment
แล้วถ้าวันที่ 1 ของเดือนเป็นวันเสาร์ล่ะ? หรือถ้าเป็นวันหยุด? (วันทำการที่สองคือวันอังคารแรกจริงๆ ตั้งใจให้เป็นวันที่สองหรือวันแรก ขึ้นอยู่กับว่าเป็นวันหยุด ยกเว้นวันหยุดอย่าง 25/12 หรือ 7/4 ที่ไม่เคลื่อนไหว...)   -  person Joe    schedule 24.06.2015
comment
สวัสดีโจ ขอบคุณสำหรับคำตอบ บริษัทยินดีที่จะดำเนินการด้วยตนเองหากวันหยุดธนาคารเกิดขึ้น แต่ในด้านนี้พบว่าวันหยุดดังกล่าวจะส่งผลต่อเราน้อยมาก   -  person Rossco2210    schedule 24.06.2015
comment
เมื่ออ่านซ้ำฉันไม่สามารถเข้าใจได้ว่าคำถามคืออะไร คุณมีรหัสที่ใช้งานได้ (ไม่ใช่สิ่งที่ฉันจะใช้อย่างแน่นอน แต่ดูเหมือนว่าจะดีพอ) คำถามคืออะไร? คุณกำลังถามถึงวิธีสร้างตัวแปรแมโครจากขั้นตอนข้อมูลหรือไม่?   -  person Joe    schedule 24.06.2015
comment
คำถามที่ฉันเดาว่าร้อนแรงที่จะเปลี่ยนจากการใช้ชุดวันที่หนึ่งชุดในโค้ดไปเป็นชุดวันที่อื่นโดยอัตโนมัติ ยกตัวอย่างเดือนมิถุนายน ในวันที่ 1 มิถุนายน ฉันต้องการให้โปรแกรมทำงานโดยใช้วันที่ตั้งแต่เดือนพฤษภาคม เนื่องจากยังมีการใช้ข้อมูล Maysa อยู่ ดังนั้นฉันจึงตั้งค่าตัวแปรมาโครให้มีวันที่ของเดือนก่อนหน้า (ซึ่งปัจจุบันคือเดือนพฤษภาคม) วันที่ 2 มิถุนายน (วันทำการที่ 2) โปรแกรมจะต้องสลับไปใช้ข้อมูลเดือนมิถุนายน จึงต้องรันด้วยตัวแปรมาโครเดือนปัจจุบันที่สร้างขึ้นแทนเดือนก่อนหน้า ฉันจะหาวิธีทำให้กระบวนการนั้นเป็นอัตโนมัติ   -  person Rossco2210    schedule 25.06.2015


คำตอบ (1)


ฉันมีรหัสล่าสุดที่ทำสิ่งนี้ นี่คือวิธีที่ฉันจัดการมัน

ขั้นแรก สร้างตารางวันหยุด สามารถรักษาได้ทุกปี

ประการที่สอง สร้างตารางโดยให้ 5 วันแรกของเดือนไม่ใช่วันหยุดสุดสัปดาห์

ประการที่สาม ลบวันหยุด

สุดท้าย รับค่าที่สองในชุดข้อมูล

data holidays;
format holiday_date date9.;
informat holiday_date date9.;
input holiday_date;
datalines;
01JAN2015
19JAn2015
16FEB2015
03APR2015
25MAY2015
03JUL2015
07SEP2015
26NOV2015
25DEC2015
;

data _dates;
firstday = intnx('month',today(),0);
format firstday date date9.;
do date=firstday to firstday+5;
    if 1 < weekday(date) < 7 then
        output;
end;
run;

proc sql noprint;
delete from _dates
where date in (select holiday_date from holidays);

quit;

data _null_;
set _dates(firstobs=2);
call symput("secondWorkDay",put(date,date9.));
stop;
run;

%put &secondWorkDay;
person DomPazz    schedule 24.06.2015
comment
ขอบคุณมากสำหรับเรื่องนี้. มันดีกว่าเวอร์ชันบนหน้า SAS แน่นอน - person Rossco2210; 25.06.2015