日付フォーマットでない文字項目をSAS日付に変換するときにログ出力されるメッセージを抑制したい - SAS
文字項目を数値やSAS日付に変換するとき使う input 関数。指定したフォーマットに合わない無効なデータを引数として渡してしまうと、ログで NOTE: ~の引数は無効です。などと怒られてしまいます。
メッセージを出してほしくない!というときは、input 関数の中に、? を使用することで、ログにメッセージがでなくなります。使用方法は、入力フォーマットの前に ? を記載するだけです。
input(A, ? yymmdd8.) ;
? が1個だけだと、NOTE: ~の引数は無効です。のメッセージが消えて、_ERROR_ のメッセージは出力されます。?? だと両方ログから消えます。
サンプルコード
data TEST ; input A $30. ; cards ; AAA こんにちは さようなら 20140102 20140830 20140229 20120229 run ; data TEST ; set TEST ; B = input(A, yymmdd8.) ; run ; data TEST ; set TEST ; C = input(A, ? yymmdd8.) ; run ; data TEST ; set TEST ; D = input(A, ?? yymmdd8.) ; run ;
ログ
43 data TEST ; 44 input A $30. ; 45 cards ; NOTE: データセットWORK.TESTは8オブザベーション、1変数です。 54 run ; 55 56 data TEST ; 57 set TEST ; 58 B = input(A, yymmdd8.) ; 59 run ; NOTE: 関数INPUT (行 58 カラム 7)の引数は無効です。 A=AAA B=. _ERROR_=1 _N_=1 NOTE: 関数INPUT (行 58 カラム 7)の引数は無効です。 A=こんにちは B=. _ERROR_=1 _N_=2 NOTE: 関数INPUT (行 58 カラム 7)の引数は無効です。 A=さようなら B=. _ERROR_=1 _N_=3 NOTE: 関数INPUT (行 58 カラム 7)の引数は無効です。 A=20140229 B=. _ERROR_=1 _N_=6 NOTE: 以下の箇所で演算式を計算できなかったため、結果を欠損値に設定しました。 (回数)(行:カラム) 4 58:7 NOTE: データセットWORK.TESTから8オブザベーションを読み込みました。 NOTE: データセットWORK.TESTは8オブザベーション、2変数です。 60 data TEST ; 61 set TEST ; 62 C = input(A, ? yymmdd8.) ; 63 run ; A=AAA B=. C=. _ERROR_=1 _N_=1 A=こんにちは B=. C=. _ERROR_=1 _N_=2 A=さようなら B=. C=. _ERROR_=1 _N_=3 A=20140229 B=. C=. _ERROR_=1 _N_=6 NOTE: データセットWORK.TESTから8オブザベーションを読み込みました。 NOTE: データセットWORK.TESTは8オブザベーション、3変数です。 64 data TEST ; 65 set TEST ; 66 D = input(A, ?? yymmdd8.) ; 67 run ; NOTE: データセットWORK.TESTから8オブザベーションを読み込みました。 NOTE: データセットWORK.TESTは8オブザベーション、4変数です。
この設定をつけてしまうと、指定したフォーマット以外がデータにあることを検知できなくなってしまうので、用途に応じて使う必要があります。例えば、YYYYMMDDしか入ってこないはずの項目に、平成22年という文字が入ってきてしまうとか・・・は検知できなくなります。
ログにメッセージは出力させたくないけど、どのレコードにおかしなデータが入ってくるか知りたい場合は、例えば以下みたいに書きます。missing 関数は、欠損値かどうかを判定する関数です。
data TEST TEST_ERR ; set TEST ; if not missing(A) then do ; B = input(A, ?? yymmdd8.) ; if missing(B) then output TEST_ERR ; end ; output TEST ; run ; proc print data=TEST_ERR ; title1 "変なレコード" ; title2 "項目Aに、YYYYMMDD以外のデータが入ってるよ!" ; run ;
コメント
コメントを投稿