proc format - SAS日時、SAS日付、SAS時間に対して、自分で出力方式を作成する

すごく久しぶりに、proc format で出力方式を作ったら、完全にど忘れして同じ失敗を繰り返してしまったので、忘れないために記事書きます。

SAS日時、SAS日付、SAS時間の出力方式って、いっぱいありますけど、たくさんある出力方式を探すの大変だし、探してみたらほしいものが無かったなんてことがまれによくあります。 そんなときに使うのが、proc format です。出力方式を自分で作ることができます。

数値や文字に対しても、出力方式を作ることもできますが、今回は、SAS日時、SAS日付、SAS時間について、出力方式を作ってみたいと思います。

proc format ;
  /* YYYY-MM-DD HH:MI:SS 形式 */
  picture YMDHMS_A other='%Y-%0m-%0D %0H:%0M:%0S' (datatype=datetime) ;
  
  /* %a で曜日も入れられます。local によって結果は異なります */
  picture YMDHMS_B other='%Y%0m%0D(%a) %0H%0M%0S' (datatype=datetime) ;
  
  /* 日本語も入れることができます */
  picture YMDHMS_C other='%Y年%0m月%0D日(%a曜日) %0H時%0M分%0S秒' (datatype=datetime) ;
  
  /* ゼロを無くすことで、セロ埋めされずに出力されます */
  picture YMDHMS_D other='%Y-%m-%D %H:%M:%S.%s' (datatype=datetime) ;
run ;

/* 作成した出力方式を使ってみる */
data _null_ ;
  DATM = datetime() ;
  putlog DATM= YMDHMS_A19. ;
  putlog DATM= YMDHMS_B20. ;
  putlog DATM= YMDHMS_C44. ;
  putlog DATM= YMDHMS_D24. ;
run ;

  1. picture ステートメントの直後に、好きな出力方式名を指定します。
  2. 値に応じて、出力方式を変えることもできますが、今回は特に変えるつもりがないので、other= と書きます。
  3. other= の後に続くシングルクォーテーションで囲まれた文字列が、出力される形式になります。
    • %Y : 年 YYYY
    • %m : 月 m 、%0m と書くことで、2桁のゼロ埋めで出力される。
    • %D : 日 D 、%0D と書くことで、2桁のゼロ埋めで出力される。
    • %H : 時 H 、%0H と書くことで、2桁のゼロ埋めで出力される。
    • %M : 分 M 、%0M と書くことで、2桁のゼロ埋めで出力される。
    • %S : 秒 S 、%0S と書くことで、2桁のゼロ埋めで出力される。
    • %s : 小数点以下の秒数。
    • %a : 曜日、local= によって、出力される文字が変わる。
    • etc...
  4. その後の半角括弧に囲まれた datatype= では、この出力方式は SAS日時に対して行うよーと宣言します。上記の例では、datatype=datetime を指定しているので、SAS日時ですね。

出力方式に指定する値について、小さすぎると、期待した形式よりも短く出力されます。日本語を含んでいる場合は、文字切れを起こす可能性もあります。日本語を含んでいる場合は、文字コードによって適切な値が異なるかと思います。今回は UTF-8 の環境で実行しているので、日本語文字 3Bytes 計算で値を設定しています。

 57         data _null_ ;
 58           DATM = datetime() ;
 59           putlog DATM= YMDHMS_A19. ;
 60           putlog DATM= YMDHMS_B20. ;
 61           putlog DATM= YMDHMS_C44. ;
 62           putlog DATM= YMDHMS_D24. ;
 63         run ;
 
 DATM=2016-07-12 00:04:31
 DATM=20160712(火) 000431
 DATM=2016年07月12日(火曜日) 00時04分31秒
 DATM=2016-7-12 0:4:31.32
 NOTE: DATAステートメント処理(合計処理時間):
       処理時間           0.02 秒
       CPU時間            0.03 秒

datatype= に指定する値を変更することで、SAS日付、SAS時間に対して出力方式を作成することができます。

proc format ;
  /* datatype=date にすると、SAS日付に対する出力方式を作成できます。 */
  picture YMD other='%Y%0m%0D' (datatype=date) ;

  /* datatype=time にすると、SAS時間に対する出力方式を作成できます。 */
  picture HMS other='%0H%0M%S' (datatype=time) ;
run ;

data _null_ ;
  D = date() ;
  T = time() ;
  putlog D= YMD. T= HMS. ;
run ;


 87         data _null_ ;
 88           D = date() ;
 89           T = time() ;
 90           putlog D= YMD. T= HMS. ;
 91         run ;
 
 D=20160711 T=232820
 NOTE: DATAステートメント処理(合計処理時間):
       処理時間           0.01 秒
       CPU時間            0.02 秒

参考サイト

コメント

  1. Merkur 34c | Xn
    A review of the Merkur 34c 인카지노 online safety razor. Features and features. The razor is 메리트 카지노 쿠폰 loaded with 10,000 gram of precious metal septcasino components

    返信削除

コメントを投稿

このブログの人気の投稿

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

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

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