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

时间:2015-05-04 00:05:21

标签: sas proc-sql

由于时间是字符格式,我在计算小时数方面遇到问题。

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

我想要这两个字段之间的区别并创建一个新字段“Hours”。

我的代码:

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

但它出错了

2 个答案:

答案 0 :(得分:3)

以下代码说明了使用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;

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

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

答案 1 :(得分:2)

除了上一个答案,我还有一点需要补充。如果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;