Steven pointed to a regex approach. This is more pedestrian.
gen alpha = ""
gen number = ""
forval i = 1/8 {
replace alpha = alpha + substr(id, `i', 1) ///
if inrange(substr(id, `i', 1), "A", "Z")
replace alpha = alpha + " " if inrange(substr(id, `i', 1), "0",
"9")
replace number = number + substr(id, `i', 1) ///
if inrange(substr(id, `i', 1), "0", "9")
}
split word
Nick
[email protected]
Steven Samuels
Martyn, this may get you started.
**************************CODE BEGINS**************************
clear
drop _all
input str8 id
INR80TMA
IR1NT
INR888
end
list
label define alpha 1 "str" 0 "num"
gen id_l=length(id)
tab id_l
****assumes ID's have length <=8****
forvalues i=1/8{
gen v`i' =substr(id,`i',1)
gen alpha`i'= regexm(v`i',"[a-zA-Z]")
label values alpha`i' alpha
}
***************************CODE ENDS***************************
On Mar 3, 2009, at 7:58 AM, Sherriff, Martyn wrote:
> I have data set which should have a string identifier of the form
> LLLNNLLL such as INR80TMA from which I can extract the first 3
> letters, 2 numbers and last 3 letters as sub-identifiers.
> Unfortunately some of the data has been miscoded such as IR1NT.
>
> How can I extract the letter, number, letter code from this, or is
> it a case of editing all the codes to the correct format. I am
> using Stata 10.
*
* 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/