我是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领域的新手,如果我在提问和粘贴样本数据等方面没有遵循惯例,那么我很抱歉。
答案 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秒