Tags egen标记跳过

Tags egen标记跳过,tags,stata,Tags,Stata,我想标记新代理类型的新实例。我使用以下代码来执行此操作: clear input long patid float(how_many_drugs agent_type eventdate) byte tag4 01 3 4 14962 1 01 3 5 14962 1 01 3 4 14997 0 01 3 9 14997 0 01 3 5 15025 0 01 3 9 15040 1 01 3 4 15040 0 01 3 5 15082 0 end format %td ev

我想标记新代理类型的新实例。我使用以下代码来执行此操作:

clear
input long patid float(how_many_drugs agent_type eventdate) byte tag4
01 3  4 14962 1
01 3  5 14962 1
01 3  4 14997 0
01 3  9 14997 0
01 3  5 15025 0
01 3  9 15040 1
01 3  4 15040 0
01 3  5 15082 0
end
format %td eventdate
label values agent_type drugstypes1
label def drugstypes1 4 "alpha blocker", modify
label def drugstypes1 5 "ace_inhib", modify
label def drugstypes1 9 "loop", modify
label def drugstypes1 13 "CCB", modify

egen tag4=tag (patid agent_type_new how_many_drugs)
代码工作正常,直到我们到达循环的第一个出现点,其中没有生成标记。而是在循环的第二次出现时生成标记

为什么会发生这种情况?如何在第一次出现时制作标签


在运行标记代码之前,我已确保数据按patid event_date排序

我已经玩了一段时间,最后放弃了egen标签。我不明白为什么它不会拾取每种代理类型的第一次出现,因此我选择了以下选项:

bys patid agent_type (eventdate): gen n=_n
sort patid eventdate
replace n=0 if n!=1

作为这个egen函数标记的原始作者,我可以对其意图进行评论

这样做的目的不是标记首次出现的事件。这样做的目的是仅标记几个事件中的一个,就用户而言,这些事件是等效的

事实上,只有两种系统化的方法来标记等效事件,即标记第一个事件或最后一个事件。由于小组可以小到一个观察点,任何规则都必须适用于这么小的小组。对于一人一组的人来说,选择第一个和选择最后一个是一样的,但除此之外,情况并非如此。我选择标记原始代码中的第一个,因为它早就被正式采用,但这是任意的

那为什么这会发生在你身上?该函数完全可以临时重新排序数据,因为查看代码将显示:

viewsource _gtag.ado
这才是令人痛心的

您希望为每个患者标记每个药物类型的每个不同值的首次出现。这是一行,就像在底部一样。我不明白为什么你的代码中使用了多少药物

clear
input long patid float(how_many_drugs agent_type eventdate) byte tag4
01 3  4 14962 1
01 3  5 14962 1
01 3  4 14997 0
01 3  9 14997 0
01 3  5 15025 0
01 3  9 15040 1
01 3  4 15040 0
01 3  5 15082 0
end
format %td eventdate
label values agent_type drugstypes1
label def drugstypes1 4 "alpha blocker", modify
label def drugstypes1 5 "ace_inhib", modify
label def drugstypes1 9 "loop", modify
label def drugstypes1 13 "CCB", modify

bysort patid agent_type (eventdate) : gen first = _n == 1 

这相当于我的较短解决方案。谢谢@NickCox。你说得对,多少药物是多余的。感谢您解释egen tagNote背后的工作原理,egen的帮助和手动输入都没有提到第一次出现!也许你已经从经验上观察到,最初的事件实际上往往是那些被标记的事件。1999年的原始讨论(见第16页)讨论了代码逻辑,如上所述。这篇文章在手动输入中引用,但对理解egen并不重要。是的,我确实注意到,在大多数情况下,第一次出现是被标记的——然后,当我尝试以几种不同的方式运行它时,我无法在不同的时间使用不同的标记。我认为第一次发生是错误的。再次感谢你指出我的错误。希望其他人也能从中学习。