全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3171 8
2016-03-30
我有如图一所示的data set,每个specific observation measure里面都有十一个standard。目前data set的状态是每个standard的score占据一行,我希望把每个specific observation measure变成一行,每行包含十一个standard的score,如图二所示。请问是否可以通过PROC SQL实现这样的transpose呢?跪求大神指点,谢谢!

图一:
Untitled.png



图二:
Untitled2.png
Untitled3.png
二维码

扫码加我 拉你入群

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

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

全部回复
2016-3-30 09:51:34
这个代码可供参考:

data A;
    length player $4 itemtype $13;
    input region player $ itemtype $ itemcount itemamount;
    cards;
1 Jack ProOther      4  184
1 Jack ProOther      2   84
1 Jack ProGameCredit 4  100
1 Jack FnB           2  106
1 Jack FnB           1   86
1 Dick ProGameCredit 1 2310
1 Dick ProGameCredit 1  210
2 Mary ProOther      2   43
2 Jack FnB           1  522
3 Jack FnB           1   88
3 Jack ProGameCredit 3 1036
3 Mary FnB           1 4578
;
run;

%macro do_work;

    %local i next_name;

    %do i=1 %to %sysfunc(countw(&itlist));

        %let next_name = %scan(&itlist, &i);

        create table a_&next_name as
            select region, player,
                   sum(itemcount) as &next_name._itemcount,
                   sum(itemamount) as &next_name._itemamount
            from a
            where itemtype eq "&next_name"
            group by region, player, itemtype;

        create table t as
            select * from b left join a_&next_name
            on (b.region = a_&next_name..region and b.player eq a_&next_name..player);

        drop table b;

        create table b as select * from t;

        drop table t;

    %end;

%mend do_work;

proc sql;

select distinct itemtype into :itlist separated by ' ' from a order by itemtype;

create table b as select distinct region, player from a;

%do_work;

select * from b;

quit;


结果:

                                                  ProGame      ProGame
                          FnB_          FnB_      Credit_      Credit_    ProOther_    ProOther_
   region  player    itemcount    itemamount    itemcount   itemamount    itemcount   itemamount
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
        1  Dick              .             .            2         2520            .            .
        1  Jack              3           192            4          100            6          268
        2  Jack              1           522            .            .            .            .
        2  Mary              .             .            .            .            2           43
        3  Jack              1            88            3         1036            .            .
        3  Mary              1          4578            .            .            .            .
二维码

扫码加我 拉你入群

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

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

2016-3-30 10:01:02
SAS,R 交流互组微信群

wc_qrcode.png

二维码

扫码加我 拉你入群

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

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

2016-3-30 22:50:39
THX! But do we really need to use macro in this case?
二维码

扫码加我 拉你入群

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

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

2016-3-31 06:35:01
这么简单,还是我没有get your point? 我没用proc sql, 在data step:

proc transpose data=data_in out=data_out(drop=_NAME_ _LABEL_) suffix=_score ;
by teacher_code obs_measure obs_specific date;
id std_code;
var score;
run;
二维码

扫码加我 拉你入群

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

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

2016-3-31 07:54:35
没用过transpose过程 原来那么方便
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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