创建在另一个变量中使用垂直查找的变量

时间:2018-01-25 01:08:45

标签: stata

如何通过查看另一个变量中的多个观察结果来创建一个指示某个条件的存在或不存在(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==.

1 个答案:

答案 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}}