这个问题是关系到Identify unique levels of categorical variable重复的值出现创造标志
之前,我有一个数据集如下:
clear
input int(id date) str8 druggroup
1001 18401 "loop"
1001 18414 "loop"
1001 18428 "loop"
1001 18462 "loop"
1001 18428 "CCB"
1001 18462 "arb"
1002 18401 "arb"
1002 18473 "arb"
1002 18414 "thiazide"
1002 18428 "thiazide"
1002 18428 "CCB"
1002 18466 "CCB"
end
format %td date
我想创建一个包含了我有最早日期的新变量每个id使用三个独立的药物组的证据。
定义“三证”的规则是我想要再次出现药物组1的重复证据,并且还要出现药物组2和3的出现。换句话说,药物组1显然会出现一次,在第一行,但我希望它再次发生。药物组2和3不需要重复发生,但它们都必须发生。
我到目前为止写的代码没有考虑到第一次出现的药物在第一次出现后需要再次出现才算作重复使用的证据。
这里是我的代码至今:
bysort id druggroup (date) : gen firstdate = date[1]
format firstdate %td
list
egen group = group(id firstdate druggroup)
bysort id (group date druggroup): gen count_1 = sum(group != group[_n-1])
replace firstdate=date[2] if count_1==1
list
by id: gen start_date=firstdate if count_1==3
format start_date %td
by id : egen start_d=max(start_date)
format start_d %td
list
这是我真正想要的:
clear
input int(id date) str8 druggroup float(firstdate group count_1 start_date start_d)
1001 18401 "loop" 18414 1 1 . 18462
1001 18414 "loop" 18414 1 1 . 18462
1001 18428 "CCB" 18428 2 2 . 18462
1001 18428 "loop" 18414 1 1 . 18462
1001 18462 "loop" 18414 1 1 . 18462
1001 18462 "arb" 18462 3 3 18462 18462
1002 18401 "arb" 18414 4 1 . 18473
1002 18414 "thiazide" 18414 5 2 . 18473
1002 18428 "CCB" 18428 6 3 . 18473
1002 18428 "thiazide" 18414 5 2 . 18473
1002 18466 "CCB" 18428 6 3 . 18473
1002 18473 "arb" 18414 4 1 18473 18473
end
format %td date
format %td firstdate
format %td start_date
format %td start_d
不幸的是有些druggroups做同一天发生。看到我的问题在下面。 – user2363642
答案可以在线程中随机更改位置并响应投票,因此对“上方”和“下方”的引用的用途有限。在写这篇文章的时候,我想你是指在你的**答案**的评论中提到一个查询,当前在这个答案之上。 –