找出特定月份是否存在变量值

时间:2019-02-11 17:42:53

标签: stata

我有以下数据:

dataex

* Example generated by -dataex-. To install: ssc install dataex
clear
input float(fooid foodate foovar1 foovar2)
0 21283 1 0
0 21260 0 0
0 21247 1 1
0 21236 0 0
0 21195 0 1
1 21246 0 0
1 21256 0 0
1 21211 0 0
1 21229 1 0
1 21228 0 0
end
format %td foodate

我想知道一个月内是否存在特定的foovar值。我想每月只进行一次观察,每个foovar只能得到一个值。

以下是我的预期结果:

  fooid  foodate    foovar1   foovar2  
    0     month1       0         1  
    0     month2       0         0  
    0     month3       1         1  
    0     month4       1         0  
    1     month1       0         0  
    1     month2       1         0  
    1     month3       0         0  
    1     month4       0         0  

1 个答案:

答案 0 :(得分:1)

您可以使用collapsefillin命令轻松做到这一点:

generate foodate2 = mofd(foodate) 

collapse (sum) foovar1 foovar2, by(fooid foodate2) 
fillin fooid foodate2
drop _fillin 

forvalues i = 1 / 2 {
    replace foovar`i' = cond(missing(foovar`i'), 0, foovar`i' > 0)
}

format %tm foodate2
list, sepby(fooid)

     +--------------------------------------+
     | fooid   foodate2   foovar1   foovar2 |
     |--------------------------------------|
  1. |     0     2018m1         0         1 |
  2. |     0     2018m2         0         0 |
  3. |     0     2018m3         1         1 |
  4. |     0     2018m4         1         0 |
     |--------------------------------------|
  5. |     1     2018m1         0         0 |
  6. |     1     2018m2         1         0 |
  7. |     1     2018m3         0         0 |
  8. |     1     2018m4         0         0 |
     +--------------------------------------+

请注意,collapse将破坏内存中的数据集。