指定图片线人以读取特定的日期时间字符串

Specifying picture informant in order to read specific datetme string

我想将 "19-APR-21 18.17.06.301100" 字符串读入 DATETIME 并相应地显示。为了实现这一点,我打算定义一个显示格式和一个 informat,如下例所示。

例子

* Define formats to read and display data;
* Input format;
PROC FORMAT LIB=work;
    PICTURE indte other = '%d-%B-%y %H.%M.%S.%s'
        (DATATYPE=DATETIME);
RUN;

* Nice display format;
PROC FORMAT LIB=work;
    PICTURE outdte other = '%d %B %y %H:%M'
        (DATATYPE=DATETIME);
RUN;

* Test with sample data;
DATA text;
    strdate = "19-APR-21 18.17.06.301100";
RUN;
    
* Apply informat and display format;
DATA pretty(RENAME=(strdate=nicedte));
    SET work.text;
    ATTRIB strdate INFORMAT=indte.;
    FORMAT strdate outdte.;
RUN;
    

Problems/questions

  1. DATA pretty 程序无法加载定义格式,returns 出现以下错误:

    NOTE 485-185: Informat $INDTE was not found or could not be loaded.

    NOTE 484-185: Format $OUTDTE was not found or could not be loaded.

  2. 对于在正确过程中通过以下来源获取的数据,这是一种有效的方法吗:infile <file ref created by filename> delimiter=',' stopover firstobs=2 dsd lrecl=32767;

PICTURE 用于创建 FORMAT,而不是 INFORMAT。

ANYDTDTM 信息格式应该处理那种风格的字符串。但是它会忽略秒的小数部分。

DATA text;
  strdate = "19-APR-21 18.17.06.301100";
  datetime = input(strdate,anydtdtm.);
  format datetime datetime26.6 ;
  put (_all_) (=/);
RUN;

结果:

strdate=19-APR-21 18.17.06.301100
datetime=19APR2021:18:17:06.000000

如果您需要秒的小数部分,则解析字符串并单独读取。

  datetime  = dhms(input(strdate,date9.)
                  ,input(scan(strdate,2,' .'),2.)
                  ,input(scan(strdate,3,' .'),2.)
                  ,input(scan(strdate,4,' .'),2.)
                  +input(scan(strdate,5,' .'),6.6)
              );