【问题标题】:Formatting HH:MM column when reading data into SAS将数据读入 SAS 时格式化 HH:MM 列
【发布时间】:2014-12-08 08:15:49
【问题描述】:

我是R 用户和SAS 初学者,试图将csv 文件读入SAS。我面临的问题是一个名为“TIME”的列,其中包含格式为“hh:mm”的时间数据,例如“下午 12 点 23 分”。在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 领域的新手,如果我在提问和粘贴示例数据等方面没有遵循惯例,我深表歉意。

【问题讨论】:

标签: time sas informat


【解决方案1】:

只需通过输入函数解析即可:

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 将其转换为上午 9 点的数字表示,方法是提交:

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 使用 informat 读取时间值:

01:00:32

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

01:00:32

【讨论】:

  • 谢谢!跟进:我能否以某种方式保留 AM/PM 指示器或将其转换为 24 小时制,否则我会丢失该信息。 . .
  • 是的,该值保留为包含自午夜 (00:00) 以来的秒数的时间值,因此如果需要,您可以找到正确的格式来显示 AM/PM。谷歌“按类别划分的 SAS 时间格式”以节省我的打字时间。
  • 为接受/赞成票干杯,非常感谢。
  • support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/… ,找到该页面并尝试但无法正常工作! data mid.prac4; set mid.prac1; DAY_HOUR_FOR_ME = input(DAY_HOUR, timeampm10.); format DAY_HOUR_FOR_ME timeampm11.; run; 错误 48-59:未找到或无法加载信息 TIMEAMPM。
  • TIMEAMPMP 不是信息。 Informats 用于读取数据,因此当您尝试在 FORMAT 语句中使用它们时,SAS 不喜欢它。保持INPUT(DAY_HOUR,TIME10.) 原样,不要在该声明中使用TIMEAMPM
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-17
  • 2015-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
相关资源
最近更新 更多