Stata The Stata listserver
[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

st: RE: splitting variables


From   "Nick Cox" <n.j.cox@durham.ac.uk>
To   <statalist@hsphsun2.harvard.edu>
Subject   st: RE: splitting variables
Date   Tue, 23 Nov 2004 13:56:35 -0000

Appropriate answers depend on whether these variables 
are string or numeric. I'll guess string. 

You can loop over possible lengths with -forval-: 
let's have an example in which the lengths range 
from 4 to 40: 

forval l = 4(2)40 { 

Now we need to find which variables are of each 
length: 

	ds <varlist>, has(type `l') 

If we find some such variables, we need to process them: 

	if "`r(varlist)'" != "" { 

Now we need to cycle over those variables: 

		foreach v of var `r(varlist)' { 

Now we need to cycle over the pairs of digits 

			local j = `l'/2 
			forval i = 1/`j' { 
				gen `v'_`i' = substr(`v',2 * `i' - 1,2) 
			}
		}
	} 

Here it is again: 

forval l = 4(2)40 { 
	ds <varlist>, has(type `l') 
	if "`r(varlist)'" != "" { 
		foreach v of var `r(varlist)' { 
			local j = `l'/2 
			forval i = 1/`j' { 
				gen `v'_`i' = substr(`v',2 * `i' - 1,2) 
			}
		}
	} 
} 

You need to 

1. replace 4(2)40 

2. plug in your <varlist> 

3. check that the new names will be OK. 

Nick 
n.j.cox@durham.ac.uk 

Jean Bouyer
 
> I would like to split a variable into several ones, but there are no
> separators. Thus I don't think I can use the split Stata command.
> I only know that variable must be split every two digits. For
> instance 123456 must be split into 12 34 and 56.
> My problem is that I have to do that for about hundred variables and
> that the number of digits is not the same for all the variables
> (although it is always even).
> 

*
*   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/



© Copyright 1996–2014 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index