我有以下数据:
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
答案 0 :(得分:1)
您可以使用collapse
和fillin
命令轻松做到这一点:
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
将破坏内存中的数据集。