2017年11月14日火曜日

【変数属性の変更】ALTER TABLE vs PROC DATASETS



(※今回は「ALTER TABLE」が主役なので、PROC DATASETS の説明はあんまりしてません)




PROC DATASETS を使うと、オブザベーションを読み込むことなく直接データセットの変数属性を変えることができますが、PROC SQL の「ALTER TABLE」を使っても同様のことができます。



構文
PROC SQL;
    ALTER TABLE データセット名
    MODIFY  変数属性を変更する文
    ADD       追加する変数と属性を指定
    DROP     削除する変数を指定
    ;
QUIT;

📝 注意
文字変数を元の LENGTH より短く変更してしまい文字切れしてしまったり、変数を誤って削除してしまったり、という事があり得るので取扱い注意。適宜バックアップをとっておく等ご対応下さい。




* Sample Data ;
data DT1;
   V1 = 1;
   V2 = 2;
   V3 = 3;
run;

* ALTER TABLE ;
proc sql;
   alter table DT1

   modify  V1 label="aaa" format=yymmdd10.  ,
               V2 label="bbb"

   add      V4  char(10)  label="xxx" ,
              V5  num        label="yyy"  format=yymmdd10.

   drop    V4, V5;
quit;



一応、ADDでやっていることを少し補足しておきます。

   add      V4  char(10)  label="xxx" ,
              V5  num        label="yyy"  format=yymmdd10.

・V4 という文字変数を長さ10で、変数ラベルを"xxx"で追加
・V5 という数値変数で、変数ラベルを"yyy"、formatをyymmdd10で追加




ALTER TABLE でしか出来ない事
「変数追加」や「変数削除」は ALTER TABLE だけ。PROC DATASETS は出来ない(はず)

proc sql;
   alter table DT1
   add  V4 char(10)
   drop V4;
quit;

また、LENGTH の変更も ALTER TABLE でしか出来ません。



PROC DATASETS でしか出来ない事
「変数名の変更」は PROC DATASETS だけ。PROC SQL の ALTER TABLE は出来ない(はず)

proc datasets lib=WORK nolist;
   modify DT1;
   rename V2=V10;
run;
quit;


ちなみに、どちらの方法も変数の型(数値・文字)を変更することはできないのであしからず。




0 件のコメント:

コメントを投稿