我有一份人员名单,以及他们在特定日期获得的药物类型。
我想创建一个变量15, 5, 50, 2
15, 5, 50, 2
,我可以将指标1给予第一种药物,第二种是独特药物,第三种是第三种独特药物。当第一种药物在第二种和第三种药物之后发生时,我希望它仍然具有指示剂1.同样对于独特药物2,它应该在整个人的整个药物历史中保持值2,并且对于药物3也是如此。 。
count
因为每个人都有不同的药物,我认为我需要一个通用的解决方案,而不是像
+-------------------------------------+
| p_id date agent_~e count |
|-------------------------------------|
38. | 1001 13dec2001 thiazide 1|
39. | 1001 12apr2002 thiazide 1|
40. | 1001 15jul2002 thiazide 1|
41. | 1001 28aug2002 arb 2|
42. | 1001 26sep2002 CCB 3|
|-------------------------------------|
43. | 1001 26sep2002 arb 2|
44. | 1001 10oct2002 CCB 3|
45. | 1001 10oct2002 thiazide 1|
46. | 1001 10oct2002 arb 2|
47. | 1001 10dec2002 CCB 3|
|-------------------------------------|
48. | 1001 10dec2002 arb 2|
+-------------------------------------+
例如,第二个人在下面,并且他们与上面的人有非常不同的药物史。
gen count = 1 if agent_type == "thiazide".
答案 0 :(得分:1)
"独特"这是一个常见的用词不当;严格来说,它意味着只发生一次,这根本不是你的意思。 "鲜明"是一个更好的词:对于Stata上下文中的讨论,请参阅here。
请从SSC了解dataex
,以便能够显示可以直接复制和粘贴的数据示例。您的一些工程设计要求易于使用。
您的问题已经是Stata常见问题found here。在发布之前查看常见问题解答是个好主意。
* Example generated by -dataex-. To install: ssc install dataex
clear
input float p_id str8 agent_type float(wanted date)
1001 "thiazide" 1 15322
1001 "thiazide" 1 15442
1001 "thiazide" 1 15536
1001 "arb" 2 15580
1001 "CCB" 3 15609
1001 "arb" 2 15609
1001 "CCB" 3 15623
1001 "thiazide" 1 15623
1001 "arb" 2 15623
1001 "CCB" 3 15684
1001 "arb" 2 15684
2001 "ace_inhi" 1 14433
2001 "ace_inhi" 1 14458
2001 "ace_inhi" 1 14481
2001 "ace_inhi" 1 14539
2001 "CCB" 2 14566
2001 "ace_inhi" 1 14566
2001 "CCB" 2 14592
2001 "CCB" 2 14621
2001 "CCB" 2 14643
2001 "arb" 3 14643
2001 "CCB" 2 14671
end
format date %td
bysort p_id agent_type (date) : gen firstdate = date[1]
egen group = group(p_id firstdate agent_type)
bysort p_id (group date agent_type): gen count = sum(group != group[_n-1])
assert count == wanted
请注意,该代码会考虑同一个人在同一天首次使用两种或更多种药物的可能性。