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。
这有用吗?
如果是这样,我怎么做到这一点?我从哪里开始?
谢谢大家!
答案 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;