更多原创:
http://crackman.net/
问题:
现有数据集X,形式如下
a1 b1 c1 d1 a2 b2 c2 d2 a3 b3 c3 d3
1 2 3 1 2 2 3 4 2 6 5 8
现在要把数据集x变成如下的样子
a b c d
1 2 3 1
2 2 3 4
2 6 5 8
答案:
data raw;
input a1 b1 c1 d1 a2 b2 c2 d2 a3 b3 c3 d3;
datalines;
1 2 3 1 2 2 3 4 2 6 5 8
11 12 13 11 12 12 13 14 12 16 15 18
;
data out;
set raw;
array temp(3,4) _numeric_;/*这个数组其实就是把数据集中的所有变量值按照三行四列的形式存储才数组中,这里非常值得注意和学习,一个观测如何存储在数组中*/
array out(4) a b c d;
do i=1 to dim1(temp);/*第一个循环是行循环,先从第一行开始,然后逐个循环列数,并通过行数和列数确定具体的数值赋值给另外一个数组,这里面输出的数组与二维数组的列数是一致,也就是结合点,在数组循环之中,最关键就是识别的结合点*/
do j=1 to dim2(temp);
out(j)=temp(i,j);
end;
output;
end;
keep a b c d;
run;
另外一个答案:
data have;
input a1 b1 c1 d1 a2 b2 c2 d2 a3 b3 c3 d3;
cards;
1 2 3 1 2 2 3 4 2 6 5 8
;
data wanted(keep= a b c d);
set have ;
array aa (3) a1-a3;
array bb (3) b1-b3;
array cc (3) c1-c3;
array dd (3) d1-d3;
do i=1 to 3;
a=aa(i); b=bb(i); c=cc(i); d=dd(i);
output;
end;
run;
其实这个就是分组建立数组,然后在SET读取每一个观测时,根据变量的规律将数值赋值给制定变量
原问题:
http://mysas.net/forum/viewtopic.php?f=4&t=6777