Top > SAS日付関連のフォーマット,インフォーマット

SAS日付関連のフォーマット,インフォーマット

Last-modified: 2008-06-03 (火) 22:31:17

SAS日付関連のフォーマット,インフォーマットには,大きく,SAS日付値用,SAS時間値用,SAS日時値用の3つがあります.なお,SAS日付などは,すべて数値型データですので,フォーマット,インフォーマットもすべて数値型となります.(see also SASの時間データの概念)

SAS日付値フォーマット,インフォーマット Edit

ddmmmyy形式 (28MAY2008) Edit

DATEインフォーマットとDATEフォーマットは,ddmmmyy形式または,ddmmmyyy形式の日付の読み書きを行います.mmmはアルファベット3文字の月の名前です.年が4桁になっている場合は,インフォーマットの幅を9以上に指定しないと,桁の一部が読み飛ばされますので注意が必要です.

フォーマットの幅 最小-最大(デフォルト)

  • DATE 5-9(7)

インフォーマットの幅 最小-最大(デフォルト)

  • DATE 7-32(7)
data;
  date="28may2008"d;
  put date;
  put date date5.;
  put date date6.;
  put date date.;
  put date date8.;
  put date date9.;
run;
/*
17680
28MAY
 28MAY
28MAY08
 28MAY08
28MAY2008
 */
data;
  input date date7.;
  input date date9.;
  input date date9.;
  input date date32.;
cards;
28MAY08
28-may-08
28MAY2008
28-May-2008
;

ddmmyy,mmddyy,yymmdd形式 (2008-05-28) Edit

DDMMYYインフォーマット,MMDDYYインフォーマット,YYMMDDインフォーマットは,文字通りの形式の日付をSAS日付に読み込むインフォーマットです.同名のフォーマットもあります.さらにこのフォーマットの派生形として,区切り文字を変えることもできます.(後述)

フォーマットの幅 最小-最大(デフォルト)

  • DDMMYY 2-10(8)
  • MMDDYY 2-10(8)
  • YYMMDD 2-10(8)

インフォーマットの幅 最小-最大(デフォルト)

  • DDMMYY 6-32(6)
  • MMDDYY 6-32(6)
  • YYMMDD 6-32(6)
data;
  date="28may2008"d;
  put date ddmmyy.;
  put date mmddyy.;
  put date yymmdd.;
  put date ddmmyy10.;
  put date mmddyy10.;
  put date yymmdd10.;
run;
/*
28/05/08
05/28/08
08-05-28
28/05/2008
05/28/2008
2008-05-28
 */
data;
   input date ddmmyy7.;
   input date mmddyy7.;
   input date yymmdd7.;
cards;
28/05/08
05/28/08
08-05-28
;

英語表記形式フォーマット (January 28, 2008) Edit

WORDDATEとWORDDATXは,英語のフルスペルの月名で日付を表示するフォーマットです.前者が米国式 month dd, yyyy, 後者が英国式 dd month yyyyの形式です.
なお,対応するインフォーマットはありません.(出力するなら読み込んでもいいと思いますが,なぜないのでしょうね?)

フォーマットの幅 最小-最大(デフォルト)

  • WORDDATE 3-32(18)
  • WORDDATX 3-32(18)
data;
  date="28jan2008"d;
  put date WORDDATE.;
  put date WORDDATX.;
run;
/*
  January 28, 2008
   28 January 2008
 */

年月日の日付構成要素別フォーマット (May) Edit

SAS日付値から,年,月,日のそれぞれだけを表示するフォーマットとして,YEARフォーマット,MONTHフォーマット,DAYフォーマットがあります.また,MONNAMEフォーマットは月の英語名を表示します.
これらには,対応するインフォーマットはありません.

フォーマットの幅 最小-最大(デフォルト)

  • YEAR 2-32(4)
  • MONTH 1-21(2)
  • DAY 2-32(2)
  • MONNAME 1-32(9)
data;
  date="28may2008"d;
  put date year.;
  put date month.;
  put date day.;
  put date monname.;
run;
/*
2008
 5
28
      May
 */

何でも読むインフォーマット Edit

ANYDTDTEインフォーマットは,まさに「何でも読む」といってもいいぐらい,さまざまな日付形式を自動認識して,SAS日付値に読んでくれるフォーマットです.
対応している日付形式は,

  • DATE
  • DDMMYY,YYMMDD,MMDDYY
  • JULIAN
  • MONYY,YYQ
  • DATETIME
  • TIME

です.
留意点として,

  • 01-02-03といった年月日の区別がつかないものに対しては,DATESTYLEシステムオプションで指定される優先順位に従って年月日が解釈される
  • MONYY,YYQのように日が特定できないものは,月初と解釈される
  • DATETIME形式(SAS日時値)の場合,時間は無視されて日付部分をSAS日付値として読み込む
  • TIME形式(SAS時間値)の場合,基準日1960/1/1をSAS日付値(値0)として読み込む

があげられます.ANYDTDTEインフォーマットは便利ですが,上記のようなあいまい性ももっているので,たよりすぎは禁物です.

インフォーマットの幅 最小-最大(デフォルト)

  • ANYDTDTE 5-32(9)
data;
  input date anydtdte16.;
  put date date.;
cards;
28MAY08
08-05-28
05/28/08
28/05/08
08149
MAY08
2008Q2
28MAY08:12:34:56
12:34:56
;
/*
28MAY08
28MAY08
28MAY08
08MAY28 <-1928年と解釈
28MAY08
01MAY08
01APR08
28MAY08
01JAN60
 */

年月形式 (MAY08) Edit

日を無視して,年月だけ表示したい場合,YYMMDDフォーマットの幅を4と短くすれば,年月だけが表示できますが,それ以外にも専用のフォーマット―
MMYYフォーマット,MONYYフォーマット,YYMMフォーマット,YYMONフォーマットがあります.
また,読み込みには,YYMMNインフォーマットと,MONYYフォーマットがあります.日は1日として解釈されます.

フォーマットの幅 最小-最大(デフォルト)

  • MMYY 5-32(7)
  • MONYY 5-7(5)
  • YYMM 5-32(7)
  • YYMON 5-32(7)

インフォーマットの幅 最小-最大(デフォルト)

  • MONYY 5-32(5)
  • YYMMN 4-6(4)
data;
  date="28may2008"d;
  put date yymmdd4.;
  put date mmyy.;
  put date monyy.;
  put date yymm.;
  put date yymon.;
run;
/*
0805
05M2008
MAY08
2008M05
2008MAY
 */
data;
  input date yymmn6.;put date date.;
  input date monyy7.;put date date.;
cards;
200805
MAY2008
;
/*
01MAY08
01MAY08
*/

ジュリアンデート形式 (2008149) Edit

ジュリアンデート(ユリウス暦)とは,年月をその年の1月1日からの経過日数で表すものです.1月1日が1で,12月31日は,365(うるう年は366)となります.そういえば,夏も近づく八十八夜とか,夏目漱石の二百十日とも,同じような意味ですね.
JULIANフォーマットは,年にジュリアンをつなげたyyddd形式で表示し,同名のインフォーマットもあります.
このほかにも,日付部分dddのみを表示するのにJULDAYフォーマット,メインフレームで使われる特殊な圧縮記録形式であるパックドジュリアンで読み書きするインフォーマットやフォーマットもあります.

フォーマットの幅 最小-最大(デフォルト)

  • JULDAY 3-32(3)
  • JULIAN 5-7(5)
  • PDJULG 3-16(4) メインフィレームで使われるパックドジュリアン形式の一種(yyyydddF)です.
  • PDJULI 3-16(4) メインフィレームで使われるパックドジュリアン形式の一種(ccyydddF)です.

インフォーマットの幅 最小-最大(デフォルト)

  • JULIAN 5-32(5)
  • PDJULG 4-4(4) メインフィレームで使われるパックドジュリアン形式の一種(yyyydddF)です.
  • PDJULI 4-4(4) メインフィレームで使われるパックドジュリアン形式の一種(ccyydddF)です.
data;
  date="28may2008"d;
  put date julday.;
  put date julian.;
  put date julian7.;
run;
/*
149
08149
2008149
 */
data;
  input date julian.;put date date.;
cards;
08149
;
/*
28MAY08
*/ 
data;
  date=input("2008149F"x,PDJULG.);
  put date date.;
  date=input("0108149F"x,PDJULI.);
  put date date.;
run;
/*
28MAY08
28MAY08
 */

4半期形式 (2008Q2) Edit

4半期単位で読み書きするものに,YYQインフォーマットとYYQフォーマットがあります.4半期を読み込む場合は,4半期の開始月の初日(1月1日,4月1日,7月1日,10月1日)として,SAS日付値に取り込まれます.
さらにフォーマットだけですが,4半期をローマ数字(I,II,III,VI)で表したり(YYQR,QTRR),年を無視して4半期のみを書き出したりするものもあります(QTR,QTRR).

フォーマットの幅 最小-最大(デフォルト)

  • YYQ 4-32(6)
  • YYQR 6-32(8)
  • QTR 1-32(1)
  • QTRR 3-32(3)

インフォーマットの幅 最小-最大(デフォルト)

  • YYQ 4-32(6)
data;
  date="28may2008"d;
  put date yyqr.;
  put date yyq.;
  put date qtrr.;
  put date qtr.;
run;
/*
 2008QII
2008Q2
 II
2
 */
data;
  input date yyq6.;put date date.;
cards;
2008Q2
;
/*
01APR08
*/

曜日フォーマット (Monday, January 28, 2008) Edit

曜日つきの日付を表示するには,WEEKDATEフォーマットやWEEKDATXフォーマットを使います.前者は,米式英語表記の前に曜日が,後者は英式英語表記の前に曜日がつきます.
曜日だけ表示したい場合には,日曜日から順に土曜日までを1から7の数字で表示するWEEKDAYフォーマットや,英語曜日名を表示するDOWNAMEフォーマットが用意されています.

フォーマットの幅 最小-最大(デフォルト)

  • WEEKDATE 3-37(29)
  • WEEKDATX 3-37(29)
  • WEEKDAY 1-32(1)
  • DOWNAME 1-32(9)
data;
  date="28jan2008"d;
  put date WEEKDATE.;
  put date WEEKDATX.;
  put date WEEKDAY.;
  put date DOWNAME.;
run;
/*
     Monday, January 28, 2008
      Monday, 28 January 2008
2
   Monday
 */

週番号 (2007-W51-03) Edit

WEEKU,WEEKV,WEEKWは,年初からの週番号で日付を表示するフォーマットで,いずれも,yyyy-Www-dd (年-週番号-曜日番号)の形式ですが,具体的には,3通りのルールがあります.同名のインフォーマットで読み込みもできます.

WEEKUは,その年の第1日曜日を週番号W01,曜日番号01とします.この第1日曜日が1月1日でなければ,1月1日から第1日曜日の前日までは,週番号W00となります.よって,週番号は,最小でW00から,最大W53までの値をとります.曜日番号は,日曜日が01で順に土曜日の07の値まで巡回し,年は,暦の年と同じです.

WEEKWは,基準日が第1月曜日であること以外は,WEEKVと同じです.

WEEKVは,上記2つとはかなり違います.その年の1月4日かそれ以前の日でそれに最も近い月曜日を週番号W01,曜日番号01とします.注意すべきは,その月曜日をもって,年も切り替えるので,暦の年と,WEEKVの年は,年末年始前後で一時的に一致しません.暦の前年末から,当年が始まる場合も,逆に,暦の1月2日以降に当年が開始する場合もあります. 週番号はW00はなく,W01から最大W53までの値をとります.
(下記プログラムでいろいろな日を表示させてみたほうがよく理解できると思います)

フォーマットの幅 最小-最大(デフォルト)

  • WEEKU 3-200(11)
  • WEEKV 3-200(11)
  • WEEKW 3-200(11)

インフォーマットの幅 最小-最大(デフォルト)

  • WEEKU 3-200(11)
  • WEEKV 3-200(11)
  • WEEKW 3-200(11)
data;
  put;
  base="01jan2008"d;
  do date=base-7 to base+7;
    put date date9. " | " date downame3. " | U " date weeku." | V " date weekv. " | W " date weekw. ;
  end;
run; 
/*
25DEC2007 | Tue | U 2007-W51-03 | V 2007-W52-02 | W 2007-W52-02
26DEC2007 | Wed | U 2007-W51-04 | V 2007-W52-03 | W 2007-W52-03
27DEC2007 | Thu | U 2007-W51-05 | V 2007-W52-04 | W 2007-W52-04
28DEC2007 | Fri | U 2007-W51-06 | V 2007-W52-05 | W 2007-W52-05
29DEC2007 | Sat | U 2007-W51-07 | V 2007-W52-06 | W 2007-W52-06
30DEC2007 | Sun | U 2007-W52-01 | V 2007-W52-07 | W 2007-W52-07
31DEC2007 | Mon | U 2007-W52-02 | V 2008-W01-01 | W 2007-W53-01
01JAN2008 | Tue | U 2008-W00-03 | V 2008-W01-02 | W 2008-W00-02
02JAN2008 | Wed | U 2008-W00-04 | V 2008-W01-03 | W 2008-W00-03
03JAN2008 | Thu | U 2008-W00-05 | V 2008-W01-04 | W 2008-W00-04
04JAN2008 | Fri | U 2008-W00-06 | V 2008-W01-05 | W 2008-W00-05
05JAN2008 | Sat | U 2008-W00-07 | V 2008-W01-06 | W 2008-W00-06
06JAN2008 | Sun | U 2008-W01-01 | V 2008-W01-07 | W 2008-W00-07
07JAN2008 | Mon | U 2008-W01-02 | V 2008-W02-01 | W 2008-W01-01
08JAN2008 | Tue | U 2008-W01-03 | V 2008-W02-02 | W 2008-W01-02
 */

この3通りのルールがある理由はなに?なんていかにも質問されそうですが,私にはわかりません.
どなたかお分かりになる方,ぜひ書き込んでおいてください.

区切り文字 (28.01.08) Edit

以下に示すフォーマットは,xの部分に,B,C,D,N,P,Sのいずれかを書くことによって,年月日の間の区切り文字を変更することができます.
なお,インフォーマットは,これらの区切り文字はどれも自動的に認識しますから,そのような指定は不要です.

フォーマットの幅 最小-最大(デフォルト)

  • DDMMYYx 2-10(8)
  • MMDDYYx 2-10(8)
  • YYMMDDx 2-10(8)
  • MMYYx 5-32(7)
  • YYMMx 5-32(7)
  • YYQx 4-32(6)
  • YYQRx 6-32(8)

xの値と対応する区切り文字

  • B ブランク(空白)
  • C コロン (:)
  • D ダッシュ(-)
  • N 区切りなし
  • P ピリオド(.)
  • S スラッシュ(/)
data;
  date="28jan2008"d;
  put date DDMMYYB.;
  put date DDMMYYC.;
  put date DDMMYYD.;
  put date DDMMYYN.;
  put date DDMMYYP.;
  put date DDMMYYS.;
run;
/*
28 01 08
28:01:08
28-01-08
28012008
28.01.08
28/01/08
 */

日本語,多国語対応 (H.20/01/28) Edit

各国独自の日付表記に対応したフォーマットもあります.
日本の元号表記には,NENGOフォーマットとインフォーマットがあります.
またシステムオプションのlocaleで指定されている国に対応した表記になる
NLDATE,NLDATEW,NLDATEMN,NLDATEWNがあります.

フォーマットの幅 最小-最大(デフォルト)

  • NENGO 2-10(10)
  • NLDATE 10-200(20)
  • NLDATEW 10-200(20)
  • NLDATEMN 4-200(10)
  • NLDATEWN 10-200(20)

インフォーマットの幅 最小-最大(デフォルト)

  • NENGO 7-32(10)
  • JDATEYMD 12-32(12)
  • JNENGO 16-32(16)
  • NLDATE 10-200(20)
data;
  date="28jan2008"d;
  put date NENGO.;
  *options LOCALE=JAPANESE_JAPAN; *日本ではこれがロケールのデフォルト値.むやみに変えると用紙サイズなどにも影響するので要注意;
  put date NLDATE.;
  put date NLDATEW.;
  put date NLDATEMN.;
  put date NLDATEWN.;
put date fradfde9.; 

run;
/*
H.20/01/28
2008年01月28日
08年01月28日 月
1月
月曜日
28jan2008
 */

日本以外にも,台湾表記のNINGUO,ヘブライ語のHDATE,ユダヤ暦のHEBDATEがあります.

ラテン系地域表記には,EURDFDD,EURDFDE,EURDFDN,EURDFDWN,EURDFMN,EURDFMY,EURDFWDX,EURDFWKX
フォーマットがあり,DFLANG=システムオプションで指定された言語に合わせた各種日付表記ができます.
さらに,これらの接頭辞EURを,

  • AFR (アフリカーンス語)
  • ITA (イタリア語)
  • NLD (オランダ語)
  • CAT (カタロニア語)
  • CRO (クロアチア語)
  • DES (スイスのドイツ語)
  • FRS (スイスのフランス語)
  • SVE (スウェーデン語)
  • ESP (スペイン語)
  • SLO (スロベニア語)
  • CSY (チェコ語)
  • DAN (デンマーク語)
  • DEU (ドイツ語)
  • NOR (ノルウェー語)
  • HUN (ハンガリー語)
  • FIN (フィンランド語)
  • FRA (フランス語)
  • POL (ポーランド語)
  • PTG (ポルトガル語)
  • MAC (マケドニア語)
  • RUS (ロシア語)

に取り替えることで,各国語の表記を行えます.

フォーマットの幅 最小-最大(デフォルト)

  • MINGUO 1-10(8)
  • HDATE 9-17(17)
  • HEBDATE 7-24(16)
  • EURDFDD 2-10(?)
  • EURDFDE 5-9(?)
  • EURDFDN 1-32(1)
  • EURDFDWN 1-32(?)
  • EURDFMN 1-32(?)
  • EURDFMY 5-7(?)
  • EURDFWDX 3-?(?)
  • EURDFWKX ?-?(?)

インフォーマットの幅 最小-最大(デフォルト)

  • MINGUO 6-10(6)
  • EURDFDE 7-32(?)
  • EURDFMY 5-32(?)
data;
  date="28jan2008"d;
  put date MINGUO.;
  put date HDATE.;
  put date HEBDATE.;
  *options DFLANG=JAPANES; *日本ではこれがデフォルト言語のデフォルト値.;
  put date EURDFwkx30.;
  put date ITADFwkx30.;
  put date NLDDFwkx30.;
  put date ESPDFwkx30.;
  put date FRADFwkx30.;
  put date DEUDFwkx30.;
  put date RUSDFwkx50.;
run;

/*
97/01/28
  2008 ・鳧癲・28
   ・・瓠漾Α
       Monday, 28 January 2008
      Luned , 28 Gennaio 2008
      maandag, 28 januari 2008
            lunes, 28 ene 2008
         Lundi 28 janvier 2008
       Montag, 28. Januar 2008
      Понедельник, 28 Январь 2008
 */

SAS時間値フォーマット,インフォーマット Edit

hhmmss形式 (12:34:56) Edit

TIMEインフォーマットとフォーマットは,hh:mm:ss.ss形式の時間をSAS時間値に読み,SAS時間値を書き出します.
am/pmをつけるには,TIMEAMPMフォーマットを使います.
ANYDTTMEインフォーマットを使えば,多くの形式の時間を自動認識し,SAS時間値に読むことができます.
対応している形式は,

  • DATE
  • DDMMYY,YYMMDD,MMDDYY
  • JULIAN
  • MONYY,YYQ
  • DATETIME
  • TIME

ですが,DATETIMEとTIME以外は,すべて0として読み込まれます.また,TIMEは,24時間超でも切り捨てられませんが,DATETIMEでは,24時間を超える部分も切り捨てられれることに留意してください.

フォーマットの幅 最小-最大(デフォルト)

  • TIME 2-20(8)
  • TIMEAMPM 2-20(11)

インフォーマットの幅 最小-最大(デフォルト)

  • TIME 5-32(8)
  • ANYDTTME 1-32(8)
data;
  time="12:34:56"t;
  put time TIME.;
  put time TIMEAMPM.;
run;

/*
12:34:56
12:34:56 PM
 */

#pre{{
data;
  input time anydttme16.;
  put time time.;
cards;
28MAY08
08-05-28
05/28/08
28/05/08
08149
MAY08
2008Q2
28MAY08:12:34:56
12:34:56
;
/*
 0:00:00
 0:00:00
 0:00:00
 0:00:00
 0:00:00
 0:00:00
 0:00:00
12:34:56 <-24時間超分は切り捨てられる
12:34:56
 */


時分秒の時間構成要素別フォーマット (12:35) Edit

SAS時間値から,時,時分,分秒のそれぞれだけを表示するフォーマットとして,
HOURフォーマット,HHMMフォーマット,MMSSフォーマットがあります.
これらには,対応するインフォーマットはありません.

フォーマットの幅 最小-最大(デフォルト)

  • HOUR 2-20(2)
  • HHMM 2-20(5)
  • MMSS 2-20(5)
data;
  time="12:34:56"t;
  put time hour.;
  put time hhmm.;
  put time mmss8.;
run;
/*
13
12:35
  754
 */

多国語対応 (午後12時34分56秒) Edit

システムオプションのlocaleで指定されている国に対応した表記になるNLTIME,NLTIMAPフォーマットとインフォーマットがあります.

フォーマットの幅 最小-最大(デフォルト)

  • NLTIME 10-200(20)
  • NLTIMAP 4-200(10)

インフォーマットの幅 最小-最大(デフォルト)

  • NLTIME 10-200(20)
  • NLTIMAP 4-200(10)
data;
  time="12:34:56"t;
  *options LOCALE=JAPANESE_JAPAN; *日本ではこれがロケールのデフォルト値.むやみに変えると用紙サイズなどにも影響するので要注意;
  put time NLTIME.;
  put time NLTIMAP20.;
run;
/*
12時34分56秒
午後12時34分56秒
 */

その他 (処理時間 1:31.25) Edit

SASログに表示される各ステップの処理時間は,値の大きさによって表示形式が変わり,TIMEインフォーマット,さらにはANYDTTMEインフォーマット
でも,正しく読めません.STIMERインフォーマットを使えば,SASログの表示形式にあわせて処理時間を読むことができます.

インフォーマットの幅 最小-最大(デフォルト)

  • STIMER ?-?(?)
data;
input @28 time stimer.;put time time10.2;
input @28 time stimer5.;put time time10.2;
cards;
       処理時間            1:31.25
       CPU 時間            50.15 秒
;
/*
0:01:31.25
0:00:50.15
 */

data;
input @28 time anydttme.;put time time10.2;
input @28 time anydttme5.;put time time10.2;
cards;
       処理時間            1:31.25
       CPU 時間            50.15 秒
;
/* timeやanydttmeフォーマットだと正しく読めない         .
         .
50:15:00.0
 */

その他,メインフレームで使われる時間の読み込みのために,いくつかのインフォーマットが用意されています.

  • TUインフォーマット
  • PDTIMEインフォーマット
  • RMFDURインフォーマット
  • MSECインフォーマット

SAS日時値フォーマット,インフォーマット Edit

ddmmmyyhhmmss形式 (28MAR08:12:34:56) Edit

DATETIMEインフォーマットとフォーマットは,ddmmmyy:hh:mm:ss.ss形式の時間をSAS時間値に読み,SAS時間値を書き出します.
am/pmをつけるには,DATEAMPMフォーマットを使います.
ANYDTDTMインフォーマットを使えば,多くの形式の時間を自動認識し,SAS時間値に読むことができます.
対応している形式は,

  • DATE
  • DDMMYY,YYMMDD,MMDDYY
  • JULIAN
  • MONYY,YYQ
  • DATETIME
  • TIME
    です.

フォーマットの幅 最小-最大(デフォルト)

  • DATETIME 7-40(16)
  • DATEAMPM 7-40(19)

インフォーマットの幅 最小-最大(デフォルト)

  • DATETIME 13-40(18)
  • ANYDTDTM 1-32(8)
data;
  datetime="28mar2008:12:34:56"dt;
  put datetime DATETIME.;
  put datetime DATEAMPM.;
run;

/*
28MAR08:12:34:56
28MAR08:12:34:56 PM
 */

#pre{{
data;
  input datetime anydtdtm16.;
  put datetime datetime.;
cards;
28MAY08
08-05-28
05/28/08
28/05/08
08149
MAY08
2008Q2
28MAY08:12:34:56
12:34:56
;
/*
28MAY08:00:00:00
28MAY08:00:00:00
28MAY08:00:00:00
08MAY28:00:00:00 <-1928年と解釈
28MAY08:00:00:00
01MAY08:00:00:00
01APR08:00:00:00
28MAY08:12:34:56
01JAN60:12:34:56
 */


年月日時間などの日時構成要素別フォーマット (28MAR08) Edit

SAS日時値から,年,年月,年月日,時間などを表示するフォーマットとして,
DTDATE,DTMONYY,DTWKDATX,DTYEAR,DTYYQC,TODフォーマットがあります.
これらには,対応するインフォーマットはありません.

フォーマットの幅 最小-最大(デフォルト)

  • DTDATE 5-9(7)
  • DTMONYY 5-7(5)
  • DTWKDATX 3-37(29)
  • DTYEAR 2-4(4)
  • DTYYQC 4-6(4)
  • TOD 2-20(8)
data;
  datetime="28mar2008:12:34:56"dt;
  put datetime DTDATE.;
  put datetime DTMONYY.;
  put datetime DTWKDATX.;
  put datetime DTYEAR.;
  put datetime DTYYQC.;
  put datetime TOD.;
run;
/*
28MAR08
MAR08
        Friday, 28 March 2008
2008
08:1
12:34:56
 */

多国語対応 (2008年03月28日 12時34分56秒) Edit

システムオプションのlocaleで指定されている国に対応した表記になる
NLDATM,NLDATMAP,NLDATMW,NLDATMTMフォーマットとNLDATMインフォーマットがあります.
また,DFLANG=システムオプションで,ラテン系各国の表記が行えるEURDFDTフォーマット,インフォーマットがあります.

フォーマットの幅 最小-最大(デフォルト)

  • NLDATM 10-200(30)
  • NLDATMAP 16-200(32)
  • NLDATMW 16-200(30)
  • NLDATMTM 16-200(16)
  • EURDFDT 7-40(16)

インフォーマットの幅 最小-最大(デフォルト)

  • NLDATM 10-200(30)
  • EURDFDT 13-40(18)
data;
  datetime="28mar2008:12:34:56"dt;
  put datetime NLDATM.;
  put datetime NLDATMAP.;
  put datetime NLDATMW.;
  put datetime NLDATMTM.;
  put datetime EURDFDT30.;
  put datetime DEUDFDT30.;

run;
/*
2008年03月28日 12時34分56秒
2008年03月28日 午後12時34分56秒
12:34 Friday, Mar 28, 2008    <- 日本語にならない.なぜ?
12時34分56秒
            28MAR2008:12:34:56
            28Mrz2008:12:34:56
 */

その他 Edit

メインフレームで使われる日付時間タイムスタンプの読み込みのために,いくつかのインフォーマットが用意されています.

  • RMFSTAMPインフォーマット
  • SHRSTAMPインフォーマット
  • SMFSTAMPインフォーマット
  • TODSTAMPインフォーマット