使用 proc sql - sas 将时间从字符转换为数字

Converting time from character to numeric using proc sql - sas

我在计算 No.of 小时时遇到问题,因为时间是字符格式。

Booked_from($)   booked_to($)
======================================
07:00            18:00
08:00            17:00

我想要这两个字段之间的差异并创建一个新字段"Hours"。

我的代码:

booked_Hours=intck(minutes,attendee.booked_to,attendee.booked_from)

但是报错

以下代码说明了使用 intck 和使用信息格式将字符转换为数字的正确方法:

data _NULL_;
  input Booked_from $  booked_to $;
  minutes=intck('minutes',input(booked_from,time5.),input(booked_to,time5.));
  hours=intck('hours',input(booked_from,time5.),input(booked_to,time5.));
  put _all_;
  datalines;
  07:00            18:00
  08:00            17:00
  ;
run;

正如我在评论中提到的,如果您想要 'hours',那么您需要指定 'hours' 的间隔类型,而不是分钟。

此外,我颠倒了第二个和第三个参数的顺序,因为原始方法给出的是负值。

除了前面的回答,我还有一点要补充。如果 Booked_from 是 23:30 并且 Booked_to 是 1:00,则必须使用条件语句来计算差异。在这种情况下,您将得到负差值。

下面的代码将帮助您解决这个问题

data mins;
    set <your dataset>;
    attrib fromtime totime format=time5.;

    fromtime=input(booked_from,time5.);
    totime=input(booked_to,time5.);

    if(totime < fromtime) then do;
        min=intck('minutes',fromtime,'24:00't)+intck('minutes','00:00't,totime);
    end;
    else do;
        min=intck('minutes',fromtime,totime);
    end;
run;