我有像515这样的时间值的变量,它应该读作5:15。为此,我使用了以下代码-
data flights;
set cs.flights;
format sched_dep_time hhmm. dep_time hhmm. ;
run;但我得到515的结果为0.09,我认为这是从凌晨12:00开始计算的时间,以秒为单位。我也用时间。格式化,但没有用。我该如何处理这件事?
发布于 2017-09-10 17:36:57
格式仅更改值的显示方式。在这种情况下,我们需要更改实际值,使其表示自午夜以来的秒数。
使用以下方法(以及请求的time_diff ):
data flights;
sched_dep_time=515;
dep_time=1215;
format sched_dep_time dep_time time_diff hhmm. ;
sched_dep_time=hms(round(sched_dep_time,100)/100
,mod(sched_dep_time,100),0);
dep_time=hms(round(dep_time,100)/100
,mod(dep_time,100),0);
time_diff=sched_dep_time-dep_time;
put (_all_)(=);
run;提供:
sched_dep_time=5:15 dep_time=12:15 time_diff=-7:00发布于 2017-09-10 19:23:27
正如您所建议的,SAS将时间值存储为自午夜以来的秒数。因此,值515是午夜后的515秒。要获得表示05:15的值,您需要进行一些转换。
SAS具有用于读取字符数据的输入功能,您可以指定数据的格式。这允许用户读取字符值'0515‘,并将其转换为表示时间05:15的数字18900。
下面使用PUT函数将数值515转换为字符值'515',并使用输入函数将其转换为18900。时间格式使18900打印为05:15:00。
data have;
sched_dep_time=515;
dep_time=1515;
run;
data want;
set have;
SchedDepTime=input(put(sched_dep_time,4.),hhmmss.);
DepTime=input(put(dep_time,4.),hhmmss.);
format SchedDepTime DepTime time.;
put (Sched_Dep_Time SchedDepTime Dep_Time DepTime)(=);
run;返回:
sched_dep_time=515 SchedDepTime=5:15:00 dep_time=1515 DepTime=15:15:00https://stackoverflow.com/questions/46138885
复制相似问题