2015年6月9日火曜日

複数の変数から、欠損値以外の値を左にシフトしたい。



やりたい事

* サンプルデータ ;
data DT1;
input (SUBJID A B C D) ($);
cards;
001 .  bb .  aa
002 .  .  cc .
003 aa .  cc bb
004 . . .  .
;







上のデータで変数A, B, C, D のうち、非欠損値を左にシフトしたい。




では解決法。と、その前に前提条件
  • 左にシフトしたい変数はすべて同じ型であること。


解決法

data DT2;
   set DT1;
   length COL1-COL4 $5.;

   array AR1(*) A B C D;
   array AR2(*) COL1-COL4;

   NO = 0;

   do i=1 to dim(AR1);
       if not missing(AR1(i)) then do;
           NO + 1;
           AR2(NO) = AR1(i);
       end;
   end;
run;

概要
まず変数A, B, C, D を配列に入れる。
配列の値をループで順番に見ていき、もし非欠損値だったら新しい変数COL1~COL4へ順番に放り込んでいく。




なんか他にいい方法あったら教えてほしいです。


0 件のコメント:

コメントを投稿