SAS: перестановка положения колонны - PullRequest
0 голосов
/ 08 марта 2012

Я хотел бы изменить расположение столбца переменной в зависимости от значения в футах: например.если ft = 1, то положим o2 и o5 @ 33 и 34. если ft = 2, то положим o2 и o5 @ 35 и 36 и так далее ... Но я думаю, что у меня неправильный цикл и массив ниже.Может кто-нибудь указать, что я сделал не так?

data fttry1;
 input ft m1 o2 m3 m4 o5;
 datalines;
 1 2 3 4 5 6 
 2 7 8 9 10 11
 3 12 13 14 15 20
 4 16 17 18 19 21
 ;
run;

data fttry2;
 set fttry1;
 file print notitles;
 put   @10 ft
       @30 M1
       @31 M3-M4;
 do ft =1 to 4;
  array ftposition[2] o2 o5;
  do i=1 to 2;
   do l=33 to 34 by 2;
    put @l ftposition[i];
   end;
  end;
 end;
run;

Ответы [ 2 ]

0 голосов
/ 09 марта 2012

Как я уже упоминал в комментарии, двузначное число проблематично. Поэтому я не включаю м3, м4 для вывода. Используйте «ft» в качестве указателя, так как он похож на серийный номер (не так ли?). Получите длину o2, чтобы убедиться, что между o2 и o5 нет перекрытия.

data fttry1;
 input ft m1 o2 m3 m4 o5;
 datalines;
 1 2 3 4 5 6 
 2 7 8 9 10 11
 3 12 13 14 15 20
 4 16 17 18 19 21
 ;
run;

data fttry2;
 set fttry1;
 file print notitles;
 by ft;
    put @10 ft
        @30 M1
        @(31+2*ft) o2
        @(31+2*ft+length(cats(o2))) o5;
run;
0 голосов
/ 08 марта 2012

Это работает?

data fttry1;
 input ft m1 o2 m3 m4 o5;
 datalines;
 1 2 3 4 5 6 
 2 7 8 9 10 11
 3 12 13 14 15 20
 4 16 17 18 19 21
 ;
run;

data fttry2;
 set fttry1;
 file print notitles;
 cnt + 1;
 put   @10 ft
       @30 M1
       @31 M3-M4 @;
  o2_loc=(ft+cnt) + 32;
  o5_loc=(ft+cnt) + 33;
 put @o2_loc o2 @;
 put @o5_loc o5 ;
run;

EDIT Эта ссылка указывает, что завершающий знак @ будет препятствовать переносу строки после оператора PUT.

...