数値定数、SAS日付定数、SAS時間定数、SAS日時定数の表現方法

数値定数、SAS日付定数、SAS時間定数、SAS日時定数の色々な書き方のご紹介です。


数値定数

title "数値定数" ;
data TEST_NUM ;
  N = 1234   ; output ;
  N = -123   ; output ;
  N = +123   ; output ;
  N = 0010   ; output ;
  N = 0.123  ; output ;
  N = 1E10   ; output ; /* 指数表記 :   1 × 10の10乗 = 10000000000 */
  N = 2.1E2  ; output ; /* 指数表記 : 2.1 × 10の 2乗 = 210         */
  N = 1E-3   ; output ; /* 指数表記 : 2.1 × 10の-3乗 = 0.001       */
  N = 2.5E-2 ; output ; /* 指数表記 : 2.5 × 10の-2乗 = 0.025       */
  N = 0x     ; output ; /* 16進数  : 10進数  0    */
  N = 010x   ; output ; /* 16進数  : 10進数 16    */
  N = 0FFx   ; output ; /* 16進数  : 10進数 255   */
  N = 0FFFFx ; output ; /* 16進数  : 10進数 65535 */
  N = .      ; output ; /* 欠損値       */
  N = .A     ; output ; /* 特殊欠損値 A */
  N = ._     ; output ; /* 特殊欠損値 _ */
run ;
proc print data=TEST_NUM ;
  format N comma22.4 ;
run ;


SAS日付定数

title "SAS日付定数" ;
data TEST_DATE ;
  DATE = '01JAN2015'd      ; output ; /* 2015/01/01 */
  DATE = '31AUG2015'd      ; output ; /* 2015/08/31 */
  DATE = '28FEB25'd        ; output ; /* 2025/02/28 (年の省略) */
  DATE = '28FEB26'd        ; output ; /* 1926/02/28 (年の省略) */
  DATE = '10DEC2015     'd ; output ; /* 2015/12/10 (ブランクは無視されます) */
  DATE = '   10DEC2015'd   ; output ; /* 2015/12/10 (ブランクは無視されます) */
  DATE = '   10DEC2015  'd ; output ; /* 2015/12/10 (ブランクは無視されます) */
run ;
proc print data=TEST_DATE ;
  format DATE yymmdds10. ;
run ;

SAS9.4 では、年を4桁ではなく2桁で表現すると、1926年から2025年の間の年となります。

参考: SAS9.4から、yearcutoff オプションのデフォルト値が 1926 になっていた


SAS時間定数

title "SAS時間定数" ;
data TEST_TIME ;
  TIME = '12:34:56't     ; output ;
  TIME = '01:02:03't     ; output ; 
  TIME = '24:00:00't     ; output ; /*  0:00:00     */
  TIME = '24:01:01't     ; output ; /*  0:01:01     */
  TIME = '12:00:00pm't   ; output ; /* 12:00:00     (pm : 午後) */
  TIME = '12:00:00am't   ; output ; /*  0:00:00     (am : 午前) */
  TIME = '00:01't        ; output ; /*  0:01:00     */
  TIME = '09:00:00.123't ; output ; /*  9:00:00.123 */
  TIME = '28:00't        ; output ; /*  4:00:00     */
  TIME = '00:70't        ; output ; /*  1:10:00     */
  TIME = '00:00:80't     ; output ; /*  0:01:20     */
run ;
proc print data=TEST_TIME ;
  format TIME nltime12.3 ;
run ;


SAS日時定数

title "SAS日時定数" ;
data TEST_DATM ;
  DATM = '01JAN2015:12:34:56.789'dt        ; output ; /* 2015/01/01 12:34:56.789 */
  DATM = '01JAN2015:12:34:56'dt            ; output ; /* 2015/01/01 12:34:56     */
  DATM = '01JAN15:12:34'dt                 ; output ; /* 2015/01/01 12:34:00     */
  DATM = '01JAN15:12:34am'dt               ; output ; /* 2015/01/01 00:34:56     */
  DATM = '2015-01-01T12:34:56Z'dt          ; output ; /* 2015/01/01 12:34:56     (グリニッジ標準時)       */
  DATM = '2015-01-01T12:34:56+09:00'dt     ; output ; /* 2015/01/01 12:34:56     (グリニッジ標準時+9時間) */
  DATM = '2015-01-01T12:34:56.789+09:00'dt ; output ; /* 2015/01/01 12:34:56.789 (グリニッジ標準時+9時間) */
run ;
proc print data=TEST_DATM ;
  format DATM nldatm23.3 ;
run ;


(おまけ) 自分のための月の省略表記

JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC



参考サイト

  1. 特殊欠損値について | SAS社 FAQ
  2. グリニッジ標準時 | Wikipedia

コメント

このブログの人気の投稿

日付フォーマットでない文字項目をSAS日付に変換するときにログ出力されるメッセージを抑制したい - SAS

Linuxコマンド: date で◯か月前 / ◯か月後を取得するときの注意

データセット(.sas7bdatファイル)の文字コードを取得したい - SAS