2017年10月5日木曜日

【CDISC】変数 [--DTC] から、ADTM, ADT, ATM への変換



CDISC関連の話。


変数「--DTC」を、ADaM変数「ADTM」「ADT」「ATM」に変換するときの、ISO8601のフォーマットと書き方を載せときます。




[--DTC] が日付のみ (時刻を含まない) の場合


※以下の例は「2017」「2017-10」等の、日付が揃っていないデータは想定していません

data DT1;

    LBDTC = "2017-10-03";

    ADT    =  input( LBDTC, e8601da. );

run;





[--DTC] が日時の場合


※以下の例は「2017-10-03」「2017-10-03T09」等の、日時が揃っていないデータは想定していません。
※以下リンクの記事に紹介してるバグにも注意。

【SAS9.3以前のBug】E8601DTインフォーマットで正しく変換できないことがある。


data DT1;

    LBDTC = "2017-10-03T09:10:00";

    ADTM =  input( LBDTC, e8601dt. );
    ADT    =  input( LBDTC, e8601da. );
    ATM    =  input( subpad(LBDTC,12), e8601tm. );

run;

・ATMだけSUBPAD関数で時刻部分の文字をとりだしてから変換が必要です。




もしも、「2017-10-03」のように日付だけで時刻がない時、
ADTMを「2017-10-03」の「0時0分0秒」として日時変換したい場合は、以下のような感じでいけます。

data DT1;

    LBDTC = "2017-10-03";

    if index(LBDTC,"T")=0 then
           ADTM = dhms( input( LBDTC, e8601da. ) ,0,0,0) ;

run;

(この辺のADTMの取り扱いは解析等での必要性に応じて個別に定義が必要だと思います。)



以上、自分用のメモ記事でした。

0 件のコメント:

コメントを投稿