特定の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万回ブログは、よく拝見させていただいております。
>もし、可能でしたら、こちらからリンクを貼らせていただいてもよろしいでしょうか?
はい。あまり記事を書かないブログで恐縮ですが、よろしくお願いいたします。
ご返信いただきまして有難うございます!
返信削除フライングでリンクさせていただいておりました。すみません。
ブログ見ていただいて有難うございます!
これからも記事楽しみにしております。
今年もよろしくお願いいたします。