特定のformatに対して処理をしたい - SAS

特定のformatの項目にだけ処理を行う方法。 SASさんは、日付型がなくて、日付は数値項目(_numeric_)として格納している。 日付に対して、一律処理を行いたかったのだけど、_date_みたいなのはないです。 日付が入っている項目のformatが全て同じ場合しか使えないけど、vformat関数を使えばできそうです。

array ○○ _numeric_ で数値項目を取得して、do over を使って、一項目ずつ処理を実施する。 文字項目の場合は、array 〇〇 _character_ で取得する。

vformat関数で、引数のformatを取り出す。 vformatは、英数字の「大文字」で返すぽい。


コード

/* テストデータ */
data test ;
  format a yymmddn8. ;
  a = "16jan86"d ;
  b = "aaaaa" ;
  c = 1234 ;
run ;

data test ;
  set test ;
  array TMP_NUM _numeric_ ; /* 数値項目を配列に格納 */
  do over TMP_NUM ;
    _format = vformat(TMP_NUM) ; /* 変数のformatを格納(英数字大文字) */
    _name   = vname(TMP_NUM) ;   /* 変数名を格納                     */
    putlog _name _format ;

    /* 特定のformatだけ処理する */
    if (_format = "YYMMDDN8.") then putlog "correct!" ;
                               else putlog "false" ;
  end ;
run ;

ログ

a YYMMDDN8.
correct!
c BEST12.
false

2015/05/15追記: テストデータが、0オブザベーションのとき実行されないじゃないか、ということで改善版の記事を書きました。「0 オブザベーションのデータセットに対して、data ステップを実行したい!」

コメント

  1. 初めまして、データステップ100万回ブログをやっておりますSASYAMAと申します。
    趣味のSASブログ探しをしていて御ブログにたどり着き、全エントリ読まさせていただきました。改行コードやBOMの話など、初めて知ることが多く、大変勉強になりました。また、小数点のところで、記事を参照いただいており、有難うございます。
    もし、可能でしたら、こちらからリンクを貼らせていただいてもよろしいでしょうか?

    返信削除
  2. 返信が大変遅れて申し訳ありません。
    データステップ100万回ブログは、よく拝見させていただいております。

    >もし、可能でしたら、こちらからリンクを貼らせていただいてもよろしいでしょうか?
    はい。あまり記事を書かないブログで恐縮ですが、よろしくお願いいたします。

    返信削除
  3. ご返信いただきまして有難うございます!
    フライングでリンクさせていただいておりました。すみません。
    ブログ見ていただいて有難うございます!
    これからも記事楽しみにしております。
    今年もよろしくお願いいたします。

    返信削除

コメントを投稿

このブログの人気の投稿

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

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

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