我想根据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;
答案 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;