特定の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 ステップを実行したい!」
初めまして、データステップ100万回ブログをやっておりますSASYAMAと申します。
返信削除趣味のSASブログ探しをしていて御ブログにたどり着き、全エントリ読まさせていただきました。改行コードやBOMの話など、初めて知ることが多く、大変勉強になりました。また、小数点のところで、記事を参照いただいており、有難うございます。
もし、可能でしたら、こちらからリンクを貼らせていただいてもよろしいでしょうか?
返信が大変遅れて申し訳ありません。
返信削除データステップ100万回ブログは、よく拝見させていただいております。
>もし、可能でしたら、こちらからリンクを貼らせていただいてもよろしいでしょうか?
はい。あまり記事を書かないブログで恐縮ですが、よろしくお願いいたします。
ご返信いただきまして有難うございます!
返信削除フライングでリンクさせていただいておりました。すみません。
ブログ見ていただいて有難うございます!
これからも記事楽しみにしております。
今年もよろしくお願いいたします。