よく質問を受けるのでまとめたいと思います。
*** サンプルデータ ; data DT1; attrib A label="ラベル1" informat=8. format=8. B label="ラベル2" informat=$10. format=$10. C label="ラベル3" informat=8. format=8. ; run; proc contents data=DT1; run; |
CONTENTSプロシジャで変数定義情報を見てみると、余計なINFORMAT(入力形式)やFORMAT(出力形式)などが付いてることがあります。これらを消す方法を紹介したいと思います。
data DT2; set DT1; *** 変数AのINFORMATを消す ; informat A ; *** 変数AのFORMATを消す ; format A ; *** 変数Aのラベルを消す ; label A= ; run; |
INFORMATとFORMATを消す処理はSETの後に書かないと機能しません。
全変数まとめて処理したい場合は_ALL_が使えます。
_ALL_でラベルを消したいときだけATTRIBを使わないと動きません。
データセットを直接更新したい場合は、DATASETSプロシジャで以下のように書いてもいけます。
データセットに直接処理するので、容量のでかいデータセットの場合はこちらの方が処理時間は早いと思います。
イコールがいる場合といらない場合があったりと、微妙に書き方の統一がとれてないので、どう書くんだっけ?となってしまいます。。
全変数まとめて処理したい場合は_ALL_が使えます。
data DT2; set DT1; *** 全変数のINFORMATを消す ; informat _ALL_ ; *** 全変数のFORMATを消す ; format _ALL_ ; *** 全変数のラベルを消す ; attrib _ALL_ label=" " ;
run;
|
_ALL_でラベルを消したいときだけATTRIBを使わないと動きません。
データセットを直接更新したい場合は、DATASETSプロシジャで以下のように書いてもいけます。
proc datasets lib=WORK nolist; modify DT1; attrib _all_ label=" "; attrib _all_ format=; attrib _all_ informat=; quit; |
データセットに直接処理するので、容量のでかいデータセットの場合はこちらの方が処理時間は早いと思います。
イコールがいる場合といらない場合があったりと、微妙に書き方の統一がとれてないので、どう書くんだっけ?となってしまいます。。
SASのバージョンアップにともなってこの辺の仕様統一もしてほしいなぁ。
0 件のコメント:
コメントを投稿