在 SAS 中创建时间变量的问题

Problems with creating Time variable in SAS

我正在尝试将时间放在 HH:MM:SS AM/PM 中,因为我将小时、分钟和 AM/PM 分为 3 个不同的变量。我的数据集如下所示:

hr_bedhr  hr_bedmin  hr_bedampm
10        0          PM
10        30         PM
12        55         AM

我希望输出看起来像这样:

hr_bedhr  hr_bedmin  hr_bedampm  bedtime
10        0          PM          22:00:00
10        30         PM          22:30:00
12        55         AM          00:55:00

我已经尝试了几种代码,但它们似乎都不起作用。这是我试过的一些代码。

data want; set have;
put (hr_bedhr, time8.);run;

这个返回 0:00:10,如果我们以第一行数据为例,实际上它应该是 10:00:00。

感谢您的帮助!

只需将它们与值之间的 space 组合起来并使用 TIME 信息。

data have ;
  input hr_bedhr  hr_bedmin  hr_bedampm $;
cards;
10        0          PM
10        30         PM
12        55         AM
;

data want;
  set have;
  time = input(catx(' ',hr_bedhr,hr_bedmin,hr_bedampm),time8.);
  format time tod8.;
run;

结果:

Obs    hr_bedhr    hr_bedmin    hr_bedampm        time

 1        10            0           PM        22:00:00
 2        10           30           PM        22:30:00
 3        12           55           AM        00:55:00

另一种方法 - 如果是 PM,则加 12 并使用 HMS() 函数。

IFN 检查它是否 AM/PM 然后将 12 添加到小时并将该值传递给 HMS 函数。

data have ;
  input hr_bedhr  hr_bedmin  hr_bedampm $;
cards;
10        0          PM
10        30         PM
12        55         AM
;

data want;
  set have;
  time = hms(hr_bedhr+ ifn(hr_bedampm='PM', 12, 0), hr_bedmin, 0);
  format time tod8.;
run;