全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2089 1
2010-10-27
更多原创: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
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2010-10-28 10:52:36
每次来都能学到些不错的东西。感谢版主辛苦整理,原创。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群