将数据读入SAS时格式化HH:MM列

时间:2014-12-07 23:29:49

标签: time sas informat

我是R用户和SAS初学者尝试将csv文件读入SAS。我面临的问题是名为" TIME"其中包含时间数据格式为" hh:mm"例如" 12:23 PM"。在R中,它就像as.POSIXct(df$TIME, format = "%I:%M %p")一样简单,我的小时立即转换为时间值(时区和今天的日期可以删除)。

这就是我尝试在SAS中实现这一点的方法:

/* firstly `rename` "TIME" to "DAY_HOUR" */
data mid.prac1;
set mid.prac1;
rename time = DAY_HOUR;
run;
/*runs successfully */

/* remove unwanted characters from DAY_HOUR */
data mid.prac2;
set mid.prac1;
DAY_HOUR = compress(DAY_HOUR, 'PMAM');
proc print; run;
/* runs successfully */

/* format hh:mm as time */
data mid.prac3;
set mid.prac2;  
informat DAY_HOUR time10.;
run;
**/*Error: ERROR 48-59: The informat $TIME was not found or could not be loaded.*/**

time informat不存在?我在SAS网站上阅读了这份文档:http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000201204.htm我认为我做得对。我是整个SAS领域的新手,如果我在提问和粘贴样本数据等方面没有遵循惯例,那么我很抱歉。

1 个答案:

答案 0 :(得分:3)

只需通过输入函数解析它:

DAY_HOUR_FOR_ME = INPUT(DAY_HOUR,TIME10.);

这应该将DAY_HOUR字符变量转换为DAY_HOUR_FOR_ME数字变量。如果您需要将其格式化为时间,请使用FORMAT语句:

FORMAT DAY_HOUR_FOR_ME time10.;

行...

FORMAT DAY_HOUR_FOR_ME timeampm11.;

<强> Informats

SAS使用信息来读取数据。所以,给出一个如下所示的字符串:

09:00:00

您可以通过提交:

让SAS将其转换为9AM的数字表示形式
time_i_want = input(text,time8.);

其中8只是字符串text的长度。然后,SAS将变量time_i_want存储为00:00到09:00之间的秒数。

<强>格式

格式用于以可用格式显示数据。如果我问你时间,你告诉我自1960年1月1日以来有多少秒钟,我会感到不高兴。但是,这就是SAS存储DATETIME值的方式:

'01JAN1960:00:01:00'dt = 60;
'31DEC1959:23:59:30'dt = -30;

因此,可以在任何datastep中使用FORMAT语句来强制生成的数据集(在DATA语句中命名的数据集)以特定格式显示值。

TIMEAMPM

是一种这样的格式。但是,TIMEAMPM不是 INFORMAT

信息和格式

某些信息通过等效格式进行镜像。 TIME8.就是一个例子。您可以要求SAS使用信息

读取时间值

1时00分32秒

然后将其存储为数值3632。然后可以使用TIME8. 格式对其进行格式化,将其显示为:

1时00分32秒