ラベル ステートメント: FORMAT の投稿を表示しています。 すべての投稿を表示
ラベル ステートメント: FORMAT の投稿を表示しています。 すべての投稿を表示

2016年9月28日水曜日

変数の順番を変える小技




たとえば変数がA、C、Bの順に並んでいるデータセットがあり、、

data DT1;
   A=1;  C=1;  B=1;
run;
  A  
  C  
  B  
  1  1  1

これをA、B、Cの順に並び替えたいとします。


この場合、以下のように
「属性定義をするステートメント」をデータステップの先頭に入れることで順番を変える事ができます。

data DT2;
   length A B C 8.;
   set DT1;
run;
  A  
  B  
  C  
  1  1  1

ただし、LENGTHステートメントの場合、変数の型とか長さも入れなきゃいけないので面倒です。


そんな時は、FORMATステートメントを使うと楽です。
(必ずデータステップの先頭に入れてください)

data DT2;
   format A B C;
   set DT1;
run;

  A  
  B  
  C  
  1  1  1



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