我正在尝试为以下日期格式创建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;
答案 0 :(得分:0)
不幸的是,目前无法在SAS中创建图片信息。您需要将数据转换为SAS具有内置信息的格式,或者使用函数或类似格式来格式化数据。
但是,您已经采用这种格式,因此您不需要创建信息。
data test;
x="2015-10-05 10:12:24.333 UTC";
y=input(x,anydtdtm.);
put y= datetime17.;
run;
使用信息时,您当然可以截断数据;通过在信息中指定长度,它将截断到该长度。
以下是使用来自datalines的输入的示例:
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;