Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
From | Nick Cox <n.j.cox@durham.ac.uk> |
To | "'statalist@hsphsun2.harvard.edu'" <statalist@hsphsun2.harvard.edu> |
Subject | RE: st: Reshaping but not numeric and more a loop needed! |
Date | Mon, 31 Oct 2011 10:40:39 +0000 |
Another way to approach this, at least for examples of similar size. The limit is not the number of rows in each table, but the width of the columns. Note that in this and in Scott's solution no loops are needed. . clear . input A B A B 1. 1.11 1.11 2. 1.11 1.12 3. 1.11 1.13 4. 1.11 1.14 5. 1.11 1.15 6. 1.11 1.16 7. 1.11 1.19 8. 1.11 1.26 9. 1.11 1.28 10. 1.11 1.29 11. 1.11 1.63 12. 1.11 1.64 13. 1.20 1.11 14. 1.20 1.12 15. 1.20 1.20 16. 1.20 1.20 17. 1.21 1.13 18. 1.21 1.14 19. 1.21 1.21 20. 1.21 1.22 21. 1.21 1.23 22. end . gen B2 = string(B, "%3.2f") . bysort A : replace B2 = B2[_n-1] + " " + B2 if _n > 1 (18 real changes made) . bysort A : gen tag = _n == _N . list A B2 if tag , noobs +--------------------------------------------------------------------+ | A B2 | |--------------------------------------------------------------------| | 1.11 1.11 1.12 1.13 1.14 1.15 1.16 1.19 1.26 1.28 1.29 1.63 1.64 | | 1.2 1.11 1.12 1.20 1.20 | | 1.21 1.13 1.14 1.21 1.22 1.23 | +--------------------------------------------------------------------+ Nick n.j.cox@durham.ac.uk Scott Merryman Something like this? clear input A B 1.11 1.11 1.11 1.12 1.11 1.13 1.11 1.14 1.11 1.15 1.11 1.16 1.11 1.19 1.11 1.26 1.11 1.28 1.11 1.29 1.11 1.63 1.11 1.64 1.20 1.11 1.20 1.12 1.20 1.20 1.20 1.20 1.21 1.13 1.21 1.14 1.21 1.21 1.21 1.22 1.21 1.23 end bys A: gen tag = _n egen tag2 = group(A) reshape wide A B, j(tag) i(tag2) rename A1 A drop A? A?? tag2 l Scott On Sat, Oct 29, 2011 at 6:29 PM, Miyu Lee <miyu.lee1@googlemail.com> wrote: > I want to reshape the following table > > A B > 1.11 1.11 > 1.11 1.12 > 1.11 1.13 > 1.11 1.14 > 1.11 1.15 > 1.11 1.16 > 1.11 1.19 > 1.11 1.26 > 1.11 1.28 > 1.11 1.29 > 1.11 1.63 > 1.11 1.64 > 1.20 1.11 > 1.20 1.12 > 1.20 1.20 > 1.20 1.20 > 1.21 1.13 > 1.21 1.14 > 1.21 1.21 > 1.21 1.22 > 1.21 1.23 > etc etc > > to look like this: > > A B1 B2 B3 > 1.11 1.11 1.12 1.13 etc > 1.20 1.11 1.12 1.20 etc > 1.21 1.14 etc. > > !!! my ideal would be if STATA just puts the B value next to the B > value of the first observation within each group, as long as the A > values are the same.!!! > > reshape does not work here because it creates a huge matrix where all > identical B values are stacked on top of each other and/or there might > also be a problem that the size of the group is not equal. > > any suggestions would be helpful. the matrix is very long so a loop or > anything similar seems the only alternative. > * * For searches and help try: * http://www.stata.com/help.cgi?search * http://www.stata.com/support/statalist/faq * http://www.ats.ucla.edu/stat/stata/