我想标记新public class MorphiaClient {
public static void main(String[] args) {
final Morphia morphia = new Morphia();
morphia.mapPackage("org.mongodb.morphia");
final Datastore datastore = morphia.createDatastore(new MongoClient(), "test");
Input input = new Input();
input.setName("name");
input.setDate(new Date());
datastore.save(input);
}
的新出现次数。我使用以下代码执行此操作:
agent_type
代码工作正常,直到我们第一次出现"循环"其中未生成标记的位置。而是在第二次出现" loop"时生成标签。
为什么会发生这种情况?如何让它在首次出现时制作标签?
我确保在运行代码之前数据按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)
排序。
答案 0 :(得分:1)
作为此egen
函数tag()
的原作者,我可以评论其意图。
目的不是标记第一次出现。目的是仅标记多个事件中的一个,就用户而言是等效的。
实际上,只有两种系统方法可以标记等效事件,标记第一个或最后一个。由于群体可以像一个观察一样小,任何规则都必须适用于小群体。对于一组,选择第一组与选择最后一组相同,但不是这样。我选择在原始代码中标记第一个(很久以来被采用到官方Stata中),但这是任意的。
为什么会发生这种情况?该功能可以完全自由地对数据进行临时重新排序,因为查看代码会显示:
viewsource _gtag.ado
这就是咬人的。
您希望为每位患者标记每种药物类型的每个不同值的第一次出现。这是一行,如底部。我不明白为什么在您的代码中使用how_many_drugs
。
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
答案 1 :(得分:0)
我已经玩了一段时间了,最后放弃了egen tag()
。我无法理解为什么它不会发现每个agent_type的第一次出现,所以我选择了这个:
bys patid agent_type (eventdate): gen n=_n
sort patid eventdate
replace n=0 if n!=1