将 AM/PM 的小时数转换为 SAS 中的数字小时数

Convert hour with AM/PM to numeric hour in SAS

我在 SAS 中有一个数据集,它具有“8AM”、“11AM”、“5PM”等形式的字符值。我的问题是如何将它们转换为数值,最好是 24小时格式?

我得到的最接近的是 1) newvar = input(oldvar, 1.); 或 2) newvar = input(oldvar, 2.);,但这并不适用于每个观察结果。

如有任何帮助,我们将不胜感激。

没有专门的信息格式,因此您必须先进行一些预处理才能使用 INPUT 函数。 TIMEw. 信息格式可用于如下所示的值:

8:00 PM

所以,我们只需要几行代码(可以压缩成一行,但为了可读性更好):

pm     =tranwrd(oldvar,'P',':00 P');
ampm   =tranwrd(pm,'A',':00 A');
newvar =input(ampm,time8.);

我们使用TRANWRD函数将'A'和'P'的出现率分别替换为':00 A'和':00 P',使它们符合信息格式并且可以作为时间值读入。

在数据步骤中使用 FORMAT 语句将值显示为 24 小时制:

FORMAT newvar TIME9.;

额外阅读

TRANWRD 函数 - http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000215027.htm

TIME 格式文档 - http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000197928.htm