SAS:列位置重排

时间:2012-03-08 16:50:46

标签: sas

我想根据ft值重新排列变量列poistion:例如。如果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 :(得分:0)

这有用吗?

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;

修改 This链接表示尾随@符号将阻止PUT语句后的换行符。

答案 1 :(得分:0)

正如我在评论中所提到的,2位数字是有问题的。所以我不包括m3,m4用于输出。使用“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;