Bagaimana saya bisa menggunakan kumpulan nilai tanggal yang berbeda bergantung pada tanggalnya

Saya ingin mengotomatiskan laporan harian untuk perusahaan saya, tetapi saya mengalami sedikit masalah. Laporan ini hanya diperbarui pada hari kerja ke-2 setiap bulannya. Saya menemukan beberapa kode di situs web SAS yang menentukan hari kerja kedua setiap bulan.

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 ; 

Saya juga telah menetapkan tanda yang membandingkan tanggal hari ini dengan tanggal yang dihasilkan oleh potongan kode ini. Saya sekarang perlu menemukan cara agar jika kode dijalankan pada hari kerja pertama setiap bulan maka kode tersebut menjalankan serangkaian variabel tanggal makro tertentu

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

dan kemudian ketika dijalankan pada hari kerja ke-2 setiap bulannya, ia menggunakan kumpulan variabel tanggal makro lainnya (bulan kalender)

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

Bantuan apa pun dalam hal ini akan sangat dihargai.


person Rossco2210    schedule 24.06.2015    source sumber
comment
Bagaimana jika tanggal 1 setiap bulan adalah hari Sabtu? Atau jika ini hari libur? (Apakah hari kerja kedua benar-benar Selasa pertama, dimaksudkan sebagai hari kedua ATAU pertama tergantung apakah itu hari libur, kecuali hari libur seperti 25/12 atau 4/7 yang tidak berpindah-pindah...)?   -  person Joe    schedule 24.06.2015
comment
Hai Joe, terima kasih atas jawabannya. Perusahaan bersedia melakukannya secara manual jika hari libur bank dan sejenisnya muncul, namun di lapangan kami sangat jarang mengalami hari libur tersebut yang berdampak pada kami.   -  person Rossco2210    schedule 24.06.2015
comment
Membaca ulang ini saya tidak tahu apa pertanyaannya sebenarnya. Anda memiliki beberapa kode yang berfungsi (bukan itu yang saya gunakan tetapi tampaknya cukup bagus). Apa pertanyaannya? Apakah Anda bertanya bagaimana cara membuat variabel makro dari langkah data?   -  person Joe    schedule 24.06.2015
comment
Pertanyaannya menurut saya menarik untuk beralih dari menggunakan satu set nilai tanggal dalam kode ke set nilai tanggal lainnya secara otomatis. Ambil contoh bulan Juni. Pada tanggal 1 Juni saya ingin program dijalankan dengan tanggal Mei karena data Maysa masih digunakan, jadi saya menetapkan variabel makro untuk memuat tanggal bulan sebelumnya (yang sekarang Mei). Pada tanggal 2 Juni (hari kerja ke-2) program perlu beralih ke data bulan Juni sehingga harus dijalankan dengan variabel makro bulan ini yang telah dibuat, bukan bulan sebelumnya. Saya akan menemukan cara untuk mengotomatiskan proses itu.   -  person Rossco2210    schedule 25.06.2015


Jawaban (1)


Saya memiliki beberapa kode terbaru yang melakukan hal ini. Inilah cara saya mengatasinya.

Pertama, buat tabel hari libur. Hal ini dapat dipertahankan setiap tahunnya.

Kedua, buat tabel dengan 5 hari pertama setiap bulan yang bukan hari akhir pekan.

Ketiga, hapus hari libur.

Terakhir, dapatkan nilai kedua dalam kumpulan data.

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
Terima kasih banyak untuk ini. ini pasti lebih baik daripada versi di halaman SAS. - person Rossco2210; 25.06.2015