Ограничение интервалов в случайных генераторах? SAS - PullRequest
0 голосов
/ 07 августа 2020

Я пытаюсь создать шаг данных, который будет выбирать день недели любого заданного месяца с помощью функции ranuni (), чтобы каждый прогон получал другой день недели. Тем не менее, я не могу не выбрать выходные. : S Это то, что у меня есть, и я был бы признателен за помощь.

%let start=09/01/2020;
%let end=09/31/2020;

data _null_;
start = input("&start",mmddyy10.);
end = input("&end",mmddyy10.);
interval = end - start+1;
call symput('start',put(start,best.));
call symput('interval',put(interval,best.));
run;


data dates;
      newdate = &start + ranuni(0) * &interval;
      if weekday(newdate) >=2 or weekday(newdate) <= 6 then do;
      Weekday=weekday(newdate);
      output;
      if newdate="" then newdate="Weekend";
      end;
      format newdate date9.;

proc print data=dates;
run;

1 Ответ

0 голосов
/ 07 августа 2020

Какой календарь вы используете с 31 сентября?

L oop до тех пор, пока вы не перейдете на месяц, не являющийся выходным днем.

Пример:

%let start=09/01/2020;
%let end=09/30/2020;

data want;
  call streaminit(123);

  do month = input("&start",MMDDYY10.) to input("&end",MMDDYY10.);
    next = intnx('month', month, 1);

    do until (weekday (date) not in (1,7));
      date = intnx('day', month, rand('integer', 0, next-month-1));
    end;

    output;
    month = next;
  end;
  format month date9. date weekdatx.;

  keep month date;
run;

...