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;
4

1 に答える 1

1

残念ながら、現在、SAS で画像入力形式を作成する方法はありません。データをSASに組み込みのinformatがある形式に変換するか、関数などを使用してデータをフォーマットする必要があります。

ただし、あなたのものはすでにそのような形式になっているため、入力形式を作成する必要はありません。

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;
于 2016-01-14T15:48:43.917 に答える