使用 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;
我在计算 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;