|  |  | 
[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]
Re: st: (st) Automatical aggregation from 4 digit codes to 3,2 digitcodes?
| From | Philipp Rehm <[email protected]> | 
| To | [email protected] | 
| Subject | Re: st: (st) Automatical aggregation from 4 digit codes to 3,2 digitcodes? | 
| Date | Thu, 23 Nov 2006 10:33:31 +0100 | 
This may work:
* inputting your example data:
clear
input  ID   year   var1
 1111   72    2
 1112   72    1
 1113   72    4
 1121   72    3
 1111   73     1
 1112   73     2
 1113   73     3
 1121   72     4
end
* doing the trick:
foreach N in 3 2 {
  preserve
  gen ID_`N'd=real(substr(string(ID),1,`N'))
  collapse (sum) var1, by(ID_`N'd year)
  rename ID_`N' ID
  tempfile temp_`N'
  save `temp_`N'', replace
  restore
}
foreach N in 3 2 {
append using `temp_`N''
}
sort year ID
list
     +--------------------+
     |   ID   year   var1 |
     |--------------------|
  1. |   11     72     14 |
  2. |  111     72      7 |
  3. |  112     72      7 |
  4. | 1111     72      2 |
  5. | 1112     72      1 |
     |--------------------|
  6. | 1113     72      4 |
  7. | 1121     72      4 |
  8. | 1121     72      3 |
  9. |   11     73      6 |
 10. |  111     73      6 |
     |--------------------|
 11. | 1111     73      1 |
 12. | 1112     73      2 |
 13. | 1113     73      3 |
     +--------------------+
Just a few things:
- The basic trick I use it to -collapse- the data-set, and then to 
append it.
- Note that the -append-s have to stay outside the loop.
- Quite often, one wants to specify weights in a collapse. That's easy 
to add.
- If you want the 1-digit aggregates as well, just add a "1" into both 
-foreach- loops.
HTH,
Philipp
[email protected] wrote:
Hello. Stata Users.
I need your help.
I have panel set containing ID(4 digit), year and Var1, for simple case.
I just want to add 2 or 3 digit level Var1 using aggregating up 4-digit level
coded. For example, Currently my dataset looks like (from sort by year id)
 ID   year   var1
 1111   72    2
 1112   72    1
 1113   72    4
 1121   72    3
   .     .    .
  ..     ..   ..
 1111   73     1
 1112   73     2
 1113   73     3
 1121   72     4
 I would like to add var1 as follows:
 ID     year     var1
 11     72     ???(7+??+....)
 111    72     7 (2+1+3)
 1111   72     2
 1112   72     1
 1113   72     4
 112    72     ?? (3+?+?...)
 1121   72     3
   .     .    .
  ..     ..   ..
 11     73     ?? (6+?)
 111    73     6 (1+2+3)
 1111   73     1
 1112   73     2
 1113   73     3
 112    73     ? (4+..)
 1121   72     4
As you see, the aggregating values should be added by year and ID.
Since I have lot of codes, it would take forever to generate each 3 and 2 digit
level manually. It is possible way to create automatically 3 and 2 digit level
code and following new var1 in the system?
Thanks. Any comments and helpful remarks should be appreciated
WT
*
*   For searches and help try:
*   http://www.stata.com/support/faqs/res/findit.html
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/
*
*   For searches and help try:
*   http://www.stata.com/support/faqs/res/findit.html
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/