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

Advice on how best to manage this dataset?

SAS 新手,希望就如何最好地处理这种数据管理情况提供建议和帮助。

我有一个数据集,其中每个观察代表一个客户。每个客户都有一个 "description" 变量,其中可能包括综合评估、治疗或出院。我创建了 3 个新变量来标记每个观察结果(如果它们包含其中之一)。

例如:

treat_yes = 1 如果描述包含 "tx"、"treatment" dc_yes = 1 如果描述包含 "dc"、"d/c" 或 "discharge" ca_yes = 1 如果描述包含 "comprehensive assessment" 或 "ca" 或 "comprehensive ax"

我的最终目标是获得经过综合评估、治疗和出院的客户的新数据集。

对于我的下一步应该是什么,我有点难过。我为客户标记了所有变量。但是可能会有重复的观察,因为客户可能来过很多次。例如:

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 的总和每个客户。

这有用吗?

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

谢谢大家!

我认为此时最简单的事情是使用 proc sql 步骤来查找三个变量中每一个的最大值,按 client_id:

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;

更好的整体方法是使用您用来创建 _yes 变量的数据集并执行类似 max(case when desc = "tx" then 1 else 0 end) as treatment_yes 等的操作,但由于您对 SAS 仍然是新手并且了解您所做的事情到目前为止,我认为上述方法完全足够了。

以下代码允许您保留原始数据集中的其他变量。为了便于说明,我添加了两个变量(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;