Random 如何在SAS中生成随机时间并获得时差?

Random 如何在SAS中生成随机时间并获得时差?,random,time,sas,generator,difference,Random,Time,Sas,Generator,Difference,我对SAS编程非常陌生。我必须为工时计算创建两个变量。我还必须使用随机时间来完成这项任务。这是我试过的 DATA wh; in_1 = 28800; in_2 = 36000; out_1 = 18000; out_2 = 25200; DO i=1 TO 5; time_in = RAND("UNIFORM", in_1, in_2); time_out = RAND("UNIFORM", out_1, out_2); working_h

我对SAS编程非常陌生。我必须为工时计算创建两个变量。我还必须使用随机时间来完成这项任务。这是我试过的

DATA wh;
in_1 = 28800;
in_2 = 36000;
out_1 = 18000;
out_2 = 25200;

DO i=1 TO 5;
  time_in = RAND("UNIFORM", in_1, in_2);
  time_out = RAND("UNIFORM", out_1, out_2);

  working_hour = INTCK('HOUR', time_out, time_in);
OUTPUT;
END;
RUN;

随机时间生成器工作正常,但INTCK函数不返回预期值。我知道这可能很愚蠢。但是我被卡住了:(

不确定您期望的是什么。输入时间在8:00到10:00之间是随机的,而超时时间在5:00到7:00之间是随机的。输入到输出的正常时间帧计算将是一个负结果!但是,您在
INTCK
中使用的参数是相反的,因此存在这样的情况

考虑这个示例代码和输出

您希望输出有什么变化?
具体来说,您希望第4行的
1
(6:43到8:39不是两个完整的小时,但是带有默认参数的INTCK计算从6:00到8:00的两个小时)

该代码使用时间文字,因此随机时间范围边缘点对人类读者更友好

data have;
  call streaminit (2021);

  do time_clock_entry_id = 1 to 5;
    time_in  = rand("uniform", '05:00:00't, '07:00:00't);
    time_out = rand("uniform", '08:00:00't, '10:00:00't);

    working_hours = intck('hour', time_in, time_out);
    output;
  end;

  format time_in time_out time8.;
run;

事实上,我解决了这个问题。我的时间范围错了。我更改了out_1和out_2的值,效果很好。无论如何,非常感谢您的回复。