投稿

10月, 2014の投稿を表示しています

特定の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 オブザベーションのデータセットに