【问题标题】:SAS Date Informat with Milliseconds以毫秒为单位的 SAS 日期信息
【发布时间】:2016-01-14 15:40:28
【问题描述】:

我正在尝试为以下日期格式创建 SAS 信息:

“yyyy-mm-dd hh:ii:ss.SSS UTC”,例如:“2016-01-14 10:31:01.456 UTC”

我已经使用以下格式代码接近了:

PROC FORMAT;
    PICTURE MyDate other='%0Y-%0m-%0d %0H:%0M:%0s UTC' (datatype=datetime);
RUN;

不幸的是,当我尝试将其用作 INFORMAT 时,我收到一个错误“找不到格式 MyDate”,因为它没有被定义为信息,只是一种输出格式。

我可以尝试从以此格式创建的数据集创建信息,但由于毫秒限制,它只会创建映射到毫秒部分中 0.000 的时间的值。例如:

DATA MyInDate ;
    RETAIN FMTNAME "MyInputDate" type "I" ;
    do label = "1jan2016:00:00:00"dt to
               "2feb2016:00:00:00"dt by 1;
        start = trim(left(put(label,MyDate.)));
        output ;
    end ;
RUN;
PROC FORMAT CNTLIN=MyInDate;
RUN;

即使我能够以毫秒为单位枚举一个数据集,它也会非常大。因为我的约会可能跨越数年。

是否可以在将我的输入数据传递给信息格式之前截断它?我不在乎毫秒或 UTC 限定符。我无法更改输入数据。

编辑:使用anydtdtm. 作为信息会导致空值没有错误消息。以下是使用此信息的数据步骤:

DATA WORK.ImportDatTest;
LENGTH
    'Event Time'n    8
;
FORMAT
    'Event Time'n    DATETIME25.
;
INFORMAT
    'Event Time'n       anydtdtm.
;
INFILE DATALINES DLM=','
    ;
INPUT
    'Event Time'n    : ANYDTDTM.
;
DATALINES;
2016-01-11 17:23:34.834 UTC
2016-01-11 17:23:34.834 UTC
2016-01-11 17:23:34.834 UTC
;

RUN;

【问题讨论】:

  • 你想做什么?信息用于读取日期,而不是显示日期,而是在 PUT 语句中使用它?或者这只是你的格式的演示?

标签: sas informat


【解决方案1】:

很遗憾,目前尚无法在 SAS 中创建图片信息。您需要将数据转换为 SAS 具有内置信息的格式,或使用函数或类似功能来格式化数据。

但是,您的格式已经是这样的格式,因此您不需要创建信息。

data test;
  x="2015-10-05 10:12:24.333 UTC";
  y=input(x,anydtdtm.);
  put y= datetime17.;
run;

您当然可以在使用信息时截断数据;通过在信息中指定长度,它将截断到该长度。

这是一个使用数据线输入的示例:

data test;
  infile datalines dlm=',' dsd;
  input y :anydtdtm32.;
  put y= datetime22.3;
  datalines;
2015-10-05 10:12:24.333 UTC
2014-03-01 08:08:05.435 UTC
2013-01-01 23:02:05.445 UTC
;;;
run;

【讨论】:

  • 谢谢。虽然您的示例有效,但一旦我使用 anydtdtm. 作为信息,我只会在结果数据集中得到空值(没有错误消息)。
  • 我在该示例中将其用作信息。您可以发布一个在您的问题中不起作用的示例吗?
  • 当然,我已经在上面添加了我的相关代码。事件时间的每个“放置”都会产生一个空值。事件时间是 CSV 中问题标题中指定格式的日期。
  • 您需要在datalines 中包含要测试的日期。最好是按原样运行代码。
  • 好的,我已经在我的代码中添加了数据线 - 我得到了 3 个空值。
猜你喜欢
  • 1970-01-01
  • 2019-05-04
  • 1970-01-01
  • 1970-01-01
  • 2022-11-27
  • 2011-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多