有关如何最好地管理此数据集的建议?

时间:2016-06-28 13:58:38

标签: database sas data-management

SAS的新手,非常感谢有关如何最好地处理此数据管理情况的建议和帮助。

我有一个数据集,其中每个观察代表一个客户端。每个客户都有一个“描述”变量,可以包括综合评估,治疗或出院。我创建了3个新变量来标记每个观察,如果它们包含其中一个。

例如:

如果描述包含“tx”,“处理”,则

treat_yes = 1 如果描述包含“dc”,“d / c”或“discharge”,则dc_yes = 1 如果desciption包含“综合评估”或“ca”或“综合斧头”,则ca_yes = 1

我的最终目标是建立一个经过综合评估,治疗和解雇的客户新数据集。

我有点难过我的下一步应该在这里。我将所有变量标记为客户端。但是可能会有重复的观察,因为客户可能会多次进入。例如:

Client_id    treatment_yes    ca_yes   dc_yes
1234               0            1        1
1234               1            0        0
1234               1            0        1

我真正关心的是,对于特定客户,变量treatment_yes,ca_yes和dc_yes不等于0(即,它们各自至少有一个“1”。它们可能有多个“1”但是长因为他们被标记至少一次)。

我认为我的下一步可能是为每个唯一的客户端ID折叠数据(如何执行此操作?),并为每个客户端汇总treatment_yes,dc_yes和ca_yes。

这有用吗?

如果是这样,我怎么做到这一点?我从哪里开始?

谢谢大家!

2 个答案:

答案 0 :(得分:0)

我认为此时最简单的方法是使用proc sql步骤来查找由client_id聚合的三个变量中的每个变量的最大值:

1,1,1,1  1,1,1,2  1,1,1,3  1,1,1,4

1,1,2,1  1,1,2,2  1,1,2,3  1,1,2,4

更好的整体方法是使用您用于创建_yes变量的数据集并执行类似data temp; input Client_id $ treatment_yes ca_yes dc_yes; datalines; 1234 0 1 1 1234 1 0 0 1234 1 0 1 ; run; proc sql; create table temp_collapse as select distinct client_id, max(treatment_yes) as treatment_yes, max(ca_yes) as ca_yes, max(dc_yes) as dc_yes from temp group by client_id; quit; 等的操作,但由于您仍然是SAS的新手并了解您的内容。到目前为止,我认为上述方法已经足够了。

答案 1 :(得分:0)

以下代码允许您保留原始数据集中的其他变量。为了便于说明,我添加了两个变量(var1和var2):

data temp;
    input Client_id $ treatment_yes ca_yes dc_yes var1 var2 $;
    datalines;
    1234 0 1 1 10 A
    1234 1 0 0 11 B
    1234 1 0 1 12 C
    ;
run;

将数据集与自身连接,以便原始数据集中client_id的每一行与子查询中构建的聚合数据集中的相应行合并。

proc sql;
    create table want as
        select *
            from temp as a 
                left join (select client_id, 
                    max(treatment_yes) as max_treat,
                    max(ca_yes) as max_ca,
                    max(dc_yes) as max_dc
                from temp
                    group by client_id) as b
                        on a.client_id=b.client_id;
quit;