Datetime 为什么';我的SAS数组语句是否引用了预期的变量?

Datetime 为什么';我的SAS数组语句是否引用了预期的变量?,datetime,sas,date-difference,Datetime,Sas,Date Difference,我正在试图找出从出发(外出)到下一次就诊(进入)发生在SAS的时间间隔 我的数据集(SAS数据集)如下所示。输入和输出变量是日期时间变量 ID In1 In2 Out1 Out2 ----------------------------------------------------------------- 1 14AUG12:10:27 16AUG12:08:38 14AUG12:16:25 16AUG1

我正在试图找出从出发(外出)到下一次就诊(进入)发生在SAS的时间间隔

我的数据集(SAS数据集)如下所示。输入和输出变量是日期时间变量

ID  In1             In2             Out1            Out2
-----------------------------------------------------------------
1   14AUG12:10:27   16AUG12:08:38   14AUG12:16:25   16AUG12:09:38
2   08AUG12:14:41   09AUG12:07:37   08AUG12:22:14   09AUG12:08:58
3   08AUG12:08:54   09AUG12:23:45   08AUG12:14:04   10AUG12:02:55
4   27AUG12:06:41   27AUG12:10:42   27AUG12:09:45   27AUG12:12:17
5   07AUG12:23:16   09AUG12:22:13   07AUG12:23:16   10AUG12:15:59
我想计算In2和Out1之间的差异,也就是说,我想计算In2-Out1的小时数(他们离开时和再次返回时的差异)。因为我有很多记录,所以我决定做一个循环。我已经改变了所有记录的输入和输出(我之前不知道这一点)。在这个特定的数据集中,我有多达In33和Out33

我的代码是

data counts;

set mydata;

array in _numeric_;

array out _numeric_;

do k = 1 to 32;

time = intck('hour', out[k], in[k+1]);

if time >= 0 and time<= 72 then output;

end;
run;    
数据计数;
设置mydata;
数组中的数值;
数组输出u数值u;
do k=1至32;
时间=intck('hour',out[k],in[k+1]);

如果时间>=0且时间,则两个数组是相同的,因为您将它们声明为等于mydata集中的所有数值变量。您必须根据data_null_的注释或更明确地命名它们:

array in in1-in33;
array out out1-out33;

我更改了阵列,现在获得了所需的精度。我就是这样做的

data counts;
set mydata;
array Ins {*} In: ;
array Outs {*} Out: ;
do k = 1 to dim(ins) - 1;
time = intck('hour', outs[k], ins[k+1]);
if time >= 0 and time <= 72 then output;
end;
run;
数据计数;
设置mydata;
数组Ins{*}In:;
数组Out{*}Out:;
do k=1至变光(ins)-1;
时间=intck('hour',out[k],ins[k+1]);

如果时间>=0,则尝试使用适当的变量定义数组。中的数组:;数组输出:;您的ID列实际上在您的数据集中吗?如果ID为数字,则在“数组输入”和“数组输出”中拾取的ID是否为数字?如果您认为缺少ID是因为您启动的是k=1而不是k=0,那么这不会有什么帮助,因为SAS数组从1开始。IN和OUT是正确的变量名。ID在数据集中。IN和OUT是原始变量,每个ID有多个记录;我将它们转换为每个ID只有一条记录,以获取In1、In2等。我事先不知道每个数组的长度,但IN和OUT总是具有相同的长度。我将尝试您的建议,找到一种显式声明数组@Snorehorse的方法