SAS proc转置而无需对数据进行排序

时间:2016-05-24 15:38:05

标签: sas transpose data-manipulation

我试图做一个相对基本的[proc转置]但是我遇到的问题是函数期望的是期望数据被排序。这适用于我正在使用的其中一个变量,但是我无法对另一个变量进行排序。我正在使用的数据看起来像这样;

data have;
    input SESSION $ Activity $;
    datalines;
AAAA    Activity1
AAAA    Activity1
AAAA    Action1
AAAA    Action1
AAAA    Activity2
AAAA    Activity2
AAAA    Action1
BBBB    Action1
BBBB    Action3
BBBB    Action3
BBBB    Activity2
BBBB    Activity2
CCCC    Activity1
CCCC    Activity1
CCCC    Action2
CCCC    Action2
CCCC    Action4
CCCC    Action1
CCCC    Activity1
;
run;

我正在尝试使数据看起来像这样,以便每个会话中不同的操作/活动水平;

data have;
input Session $ Label $ Part"x" $;
datalines;
AAAA    Journey    Activity1    Activity1    Action1    Action1    Activity2    Activity2    Action1
BBBB    Journey    Action1      Action3      Activity2  Activity2
CCCC    Journey    Activity1    Activity1    Action2    Action2    Action4    Action1    Activity1

我一直在玩下面的代码但是[proc transpose]函数需要对数据进行排序,其中' Activity'在这种情况下不可能。我想我需要使用[notsorted]功能,但我不知道把它放在哪里。虽然我知道这不正确但我有以下内容;

proc sort data=custs.tenmay_pre_transpose
        out=custs.tenmay_trans_srt ;
by SESSIONID Activty_Category notsorted;
run;

proc transpose data=custs.tenmay_trans_srt
                out= custs.tenmay_traspose
                name=Journey;
by SESSIONID;
run; 

1 个答案:

答案 0 :(得分:2)

Activity不需要排序。只需要对by个变量进行排序。

proc sort data=have;
  by session;
run;

proc transpose data=have
                out= want
                name=Journey;
by SESSION;
var activity;
run; 

这会让你得到你想要的东西,我想(我不确定Journey应该放在哪里,但我把它留在代码中 - 它是变量存储的名称转置变量的名称)。