2014年6月17日火曜日

変数のINFORMAT, FORMAT, LABELを消す方法。




よく質問を受けるのでまとめたいと思います。

*** サンプルデータ ;
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のバージョンアップにともなってこの辺の仕様統一もしてほしいなぁ。


0 件のコメント:

コメントを投稿