3

我是一名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 领域的新手,如果我在提问和粘贴示例数据等方面没有遵循惯例,我深表歉意。

4

1 回答 1

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.;

信息

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;

等等

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

TIMEAMPM

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

信息和格式

某些信息由等效格式反映。TIME8.是一个例子。您可以要求 SAS 使用信息读取时间值:

01:00:32

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

01:00:32

于 2014-12-07T23:41:37.800 回答