0

我想将"19-APR-21 18.17.06.301100"字符串读入 aDATETIME并相应地显示。为了实现这一点,我打算定义一个显示格式和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;
    

问题/疑问

  1. DATA pretty过程无法加载定义格式并返回以下错误:

    注意 485-185:$INDTE未找到或无法加载信息。

    注意 484-185:格式$OUTDTE未找到或无法加载。

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

1 回答 1

1

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)
              );
于 2021-04-29T12:09:52.740 回答