如何通过查看另一个变量中的多个观察结果来创建一个指示某个条件的存在或不存在(0/1)的变量? (因此,这个垂直查找将受到时间段的限制。)
例如,在下面的示例代码中,仅当类别1在相应的一周内显示时,所有类别(1,2和3)的新变量tag_prodcateg1
应等于1。
clear
input str2 product prodcategory promo week tag_prodcateg1
A 1 1 1 1
B 1 0 1 1
C 2 1 1 1
D 2 1 1 1
E 3 0 1 1
F 3 0 1 1
A 1 0 2 0
B 1 0 2 0
C 2 1 2 0
D 2 1 2 0
E 3 0 2 0
F 3 0 2 0
X 4 1 3 .
Y 4 1 3 .
end
我只能一次性完成所有观察(即不按周计算):
egen uniqueid=group(prodcategory week)
bysort uniqueid: egen sumdisp=total(promo) if prodcategory==1
gen tagsubcatweekondisp=1 if sumdisp>0
replace tagsubcatweekondisp=0 if tagsubcatweekondisp==.
答案 0 :(得分:3)
这似乎可以胜任。
. list, clean noobs
product prodca~y promo week tag_pr~1 pc1p tag1
A 1 1 1 1 1 1
B 1 0 1 1 0 1
C 2 1 1 1 0 1
D 2 1 1 1 0 1
E 3 0 1 1 0 1
F 3 0 1 1 0 1
A 1 0 2 0 0 0
B 1 0 2 0 0 0
C 2 1 2 0 0 0
D 2 1 2 0 0 0
E 3 0 2 0 0 0
F 3 0 2 0 0 0
产生以下结果
generate pc1p = prodcategory==1 & promo==1
bysort week (product): egen tag1 = max(pc1p)
generate pc2 = prodcategory==1
bysort week (product): egen tag2 = max(pc2)
replace tag1 = 2 if tag1==0 & tag2==0
list, clean noobs
上面的代码解决了原始问题:如果其中一个观察结果是针对productcategory = 1并且promo = 1,那么为给定周内的所有观察创建一个1的变量。现在问题已经更新,包括如果在给定的一周内没有对productcategory = 1的观察,则变量需要为2而不是0。
上面的代码显示了将结果从一个观察结果复制到其他相关观察结果的一般技术。要解决新问题,将采用相同的技术。下面的代码执行我理解的需要。但是,经验教训是,可以理解并使用允许解决原始问题的相同技术来解决进一步的,基本相同的问题。
. list, clean noobs
product prodca~y promo week tag_pr~1 pc1p tag1 pc2 tag2
A 1 1 1 1 1 1 1 1
B 1 0 1 1 0 1 1 1
C 2 1 1 1 0 1 0 1
D 2 1 1 1 0 1 0 1
E 3 0 1 1 0 1 0 1
F 3 0 1 1 0 1 0 1
A 1 0 2 0 0 0 1 1
B 1 0 2 0 0 0 1 1
C 2 1 2 0 0 0 0 1
D 2 1 2 0 0 0 0 1
E 3 0 2 0 0 0 0 1
F 3 0 2 0 0 0 0 1
X 4 1 3 . 0 2 0 0
Y 4 1 3 . 0 2 0 0
产生以下结果,其中tag1现在在第3周的观察值中取值2,此时productcategory 1没有出现。
{{1}}