【问题标题】:SAS proc transpose without needing to sort the dataSAS proc 转置,无需对数据进行排序
【发布时间】:2016-05-24 15:38:04
【问题描述】:

我正在尝试做一个相对基本的 [proc transpose] 但是我遇到的问题是该函数期望对数据进行排序。这对于我正在使用的变量之一很好,但是我无法对另一个变量进行排序。我正在使用的数据如下所示;

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; 

【问题讨论】:

    标签: sas transpose data-manipulation


    【解决方案1】:

    Activity 不需要排序。只有by 变量需要排序。

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

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

    【讨论】:

    • 太棒了!谢谢!我已经设法让它工作了。我现在想知道这是如何工作的。排序后的数据集是否以某种方式保存在内存中?我想我需要一个 [out=] 语句才能让 [proc transpose] 知道排序的输出是什么。
    • 没有out=proc sort 替换输入数据集。
    猜你喜欢
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    • 2013-11-27
    • 2022-07-14
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多