首页 文章

SAS日期信息以毫秒为单位

提问于
浏览
1

我正在尝试为以下日期格式创建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”,因为它尚未定义为信息,只是输出格式 .

我可以尝试从这种格式创建的数据集中创建一个信息,但由于毫秒限制,它只会创建映射到毫秒部分的.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;

1 回答

  • 0

    不幸的是,目前无法在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;
    

相关问题