Создать составную переменную продуктов - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть данные о продуктах со скидкой за каждый год:

* Example generated by -dataex-. To install: ssc install dataex
clear
input float(code year) strL product
15328 2007 "Coca-Cola"          
15328 2007 "Coca-Cola Diet"     
15328 2008 "Pepsi"              
15328 2010 "Pepsi Diet"         
15328 2010 "Dr Pepper"          
15328 2011 "7 Up"               
15328 2012 "Aquafina"           
15328 2012 "Fanta"              
15328 2013 "Amp Energy"         
15328 2013 "Manhattan Special"  
15328 2013 "Jolt Cola"          
15328 2013 "Mountain Dew"       
15328 2014 "Cocofina"           
15328 2014 "Highland Spring"    
15328 2015 "Lucozade"           
15328 2016 "Ribena"             
15328 2017 "Classic Cola"       
15328 2017 "Red Cola"           
16564 2009 "Dove"               
16564 2009 "The Body Shop"      
16564 2010 "L'Occitane"         
16564 2011 "Dove Sensitive"     
16564 2015 "Paul Mitchell"      
16564 2015 "Aveda"              
16897 2007 "L'eau D'issey"      
16897 2010 "Versace Eros"       
16897 2010 "Dolce & Gabbana"    
16897 2010 "Paul Sebastian"     
16897 2011 "Ck One"             
16897 2011 "Versace Man"        
16897 2015 "Jean Paul Gaultier" 
16897 2016 "Boss No. 6"         
16897 2018 "Aramis"             
17874 2007 "Adidas"             
17874 2011 "Airness"            
17874 2013 "Reebok"             
17874 2014 "Nike"               
17874 2014 "Caterpillar"        
17874 2015 "Columbia sportswear"
17874 2015 "Asics"              
end

Как я могу создать составную переменную в Stata со всеми продуктами для определенного кода по годам?

1 Ответ

0 голосов
/ 23 сентября 2018

Это, вероятно, мой любимый подход:

bysort code year: generate _j = _n
reshape wide product, i(code year) j(_j)

ds product*
egen products = concat(`r(varlist)'), punct(" ")

Приведенный выше фрагмент кода создаст строковую переменную products по желанию:

list code year products

     +--------------------------------------------------------------------+
     |  code   year                                              products |
     |--------------------------------------------------------------------|
  1. | 15328   2007                              Coca-Cola Coca-Cola Diet |
  2. | 15328   2008                                                 Pepsi |
  3. | 15328   2010                                  Pepsi Diet Dr Pepper |
  4. | 15328   2011                                                  7 Up |
  5. | 15328   2012                                        Aquafina Fanta |
     |--------------------------------------------------------------------|
  6. | 15328   2013   Amp Energy Manhattan Special Jolt Cola Mountain Dew |
  7. | 15328   2014                              Cocofina Highland Spring |
  8. | 15328   2015                                              Lucozade |
  9. | 15328   2016                                                Ribena |
 10. | 15328   2017                                 Classic Cola Red Cola |
     |--------------------------------------------------------------------|
 11. | 16564   2009                                    Dove The Body Shop |
 12. | 16564   2010                                            L'Occitane |
 13. | 16564   2011                                        Dove Sensitive |
 14. | 16564   2015                                   Paul Mitchell Aveda |
 15. | 16897   2007                                         L'eau D'issey |
     |--------------------------------------------------------------------|
 16. | 16897   2010           Versace Eros Dolce & Gabbana Paul Sebastian |
 17. | 16897   2011                                    Ck One Versace Man |
 18. | 16897   2015                                    Jean Paul Gaultier |
 19. | 16897   2016                                            Boss No. 6 |
 20. | 16897   2018                                                Aramis |
     |--------------------------------------------------------------------|
 21. | 17874   2007                                                Adidas |
 22. | 17874   2011                                               Airness |
 23. | 17874   2013                                                Reebok |
 24. | 17874   2014                                      Nike Caterpillar |
 25. | 17874   2015                             Columbia sportswear Asics |
     +--------------------------------------------------------------------+

Тип help reshape и help egen из командной строки Stata для получения дополнительной информации.

(Снимаю шляпу перед @NickCox за напоминание о том, насколько полезной может быть egen функция concat()!)


РЕДАКТИРОВАТЬ:

Самый простой способ добавить запятую для разделения различных продуктов, это изменить код следующим образом:

<b>replace product = product + ", " </b>

bysort code year: generate _j = _n
<b>reshape wide product, i(code year) j(_j)</b>

ds product*
<b>egen products = concat(`r(varlist)')</b>

<b>replace products = substr(products, 1, length(products) - 1)</b>

Идея заключается в том, чтобы добавитьзапятая в конце каждого продукта, а затем после reshape устраните нежелательную запятую, используя комбинацию функций substr() и length():

list code year products

     +-----------------------------------------------------------------------+
     |  code   year                                                 products |
     |-----------------------------------------------------------------------|
  1. | 15328   2007                                Coca-Cola, Coca-Cola Diet |
  2. | 15328   2008                                                    Pepsi |
  3. | 15328   2010                                    Pepsi Diet, Dr Pepper |
  4. | 15328   2011                                                     7 Up |
  5. | 15328   2012                                          Aquafina, Fanta |
     |-----------------------------------------------------------------------|
  6. | 15328   2013   Amp Energy, Manhattan Special, Jolt Cola, Mountain Dew |
  7. | 15328   2014                                Cocofina, Highland Spring |
  8. | 15328   2015                                                 Lucozade |
  9. | 15328   2016                                                   Ribena |
 10. | 15328   2017                                   Classic Cola, Red Cola |
     |-----------------------------------------------------------------------|
 11. | 16564   2009                                      Dove, The Body Shop |
 12. | 16564   2010                                               L'Occitane |
 13. | 16564   2011                                           Dove Sensitive |
 14. | 16564   2015                                     Paul Mitchell, Aveda |
 15. | 16897   2007                                            L'eau D'issey |
     |-----------------------------------------------------------------------|
 16. | 16897   2010            Versace Eros, Dolce & Gabbana, Paul Sebastian |
 17. | 16897   2011                                      Ck One, Versace Man |
 18. | 16897   2015                                       Jean Paul Gaultier |
 19. | 16897   2016                                               Boss No. 6 |
 20. | 16897   2018                                                   Aramis |
     |-----------------------------------------------------------------------|
 21. | 17874   2007                                                   Adidas |
 22. | 17874   2011                                                  Airness |
 23. | 17874   2013                                                   Reebok |
 24. | 17874   2014                                        Nike, Caterpillar |
 25. | 17874   2015                               Columbia sportswear, Asics |
     +-----------------------------------------------------------------------+
...