よく質問を受けるのでまとめたいと思います。
*** サンプルデータ ;
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_が使えます。
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のバージョンアップにともなってこの辺の仕様統一もしてほしいなぁ。