Узнайте, существует ли значение переменной в конкретном месяце - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть следующие данные:

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 голосов
/ 11 февраля 2019

Вы можете легко сделать это с помощью команд 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 уничтожит набор данных в памяти.

...