将形式为515的SAS中的时间值读取为5:15

时间:2017-09-10 08:48:36

标签: sas

我的变量有时间值,如515,应该像5:15一样读取 为此,我使用了以下代码 -

data flights;
set cs.flights;
format sched_dep_time hhmm. dep_time hhmm. ;
run;

但我得到515的结果为0.09 我认为它是从上午12:00开始计算的时间。  我也用时间。格式但没有用。 我该如何处理这个?

2 个答案:

答案 0 :(得分:0)

格式仅更改值的显示方式。在这种情况下,我们需要更改实际值,使其表示自午夜以来的秒数。

以下方法(以及所请求的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

答案 1 :(得分:0)

如您所知,SAS将时间值存储为午夜以来的秒数。所以515的值是午夜后的515秒。要获得代表05:15的值,您需要进行一些转换。

SAS具有INPUT功能,用于读取字符数据,您可以指定数据的格式。这允许用于读取字符值< 0515'并将其转换为数字18900,表示时间05:15。

下面使用PUT函数将数值515转换为字符值' 515'和INPUT函数将其转换为18900.时间格式使18900打印为05:15:00。

sched_dep_time=515 SchedDepTime=5:15:00 dep_time=1515 DepTime=15:15:00

返回:

@Transactional
public void deleteInsert(List<TableB> bList) {
    TableA tableA = aRepository.findByEtc(...);
    bRepository.deleteByTableA(tableA);
    bRepository.flush();

    bRepository.save(bList);
}