次の日付形式の 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;