Bookmark and Share

Notice: On March 31, it was announced that Statalist is moving from an email list to a forum. The old list will shut down on April 23, and its replacement, statalist.org is already up and running.


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: st: foreach / forvalues loop error


From   Nick Winter <nwinter@virginia.edu>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: foreach / forvalues loop error
Date   Tue, 30 Aug 2011 09:12:38 -0400

Hi,

Sorry to be joining this party late. Unless I am missing something, I think the -label()- option of -encode- does exactly what you want, by using the coding in a label to define the mapping from text to numbers.

So:

label define primsitelab 1 "Oral Cavity" 2 "Oropharynx" ///
  3 "Hypopharynx" 4 "Larynx" 5 "Nasopharynx" ///
  6 "Paranasal Sinus" 7 "Skin"  8 "Salivary Gland" ///
  9 "Unknown Primary" 10 "Thyroid" 11 "Other Site" ///
  99 "Not Stated"

encode Primary_site , gen(primsitenum) label(primsitelab)


- Nick Winter



On 8/26/2011 12:56 PM, Steve Nakoneshny wrote:
Dear Statlisters,

I have a series of variables that are entered into a head and neck cancer database as categorical variables. However, the database stores and exports them as strings. We have also pre-specified the values we wish each of these values to hold in a categorical variable. Prior to analysing the data using Stata 11.2, I need to convert this data from a string to a categorical variable. What I have done thus far is to use -encode- and then -recode- in order to recode the values to our pre-specified ones.

The main flaw in this approach is that data contained in each of these variables will differ depending on the query entered into the database, so while -encode- will always work, I have to change the -recode- values per dataset in order to make different datasets compatible. This is too labour intensive and heavily error prone.

I have explored -egen newvar = group(varlist), label- as an alternative, except that it too is limited by the context of a given database query and I am unsure how to remap the values and value labels to match our specifications.

To move beyond the query context issue and write our code to be useful in a production environment (i.e. repetitive and consistent), I have written ~15 lines of code that will do what I need. Here is one of the variables:

----
generate primsitenum = 1 if Primary_site=="Oral Cavity"
replace primsitenum = 2 if Primary_site=="Oropharynx"
replace primsitenum = 3 if Primary_site=="Hypopharynx"
replace primsitenum = 4 if Primary_site=="Larynx"
replace primsitenum = 5 if Primary_site=="Nasopharynx"
replace primsitenum = 6 if Primary_site=="Paranasal/Nasal"
replace primsitenum = 7 if Primary_site=="Skin"
replace primsitenum = 8 if Primary_site=="Salivary Gland"
replace primsitenum = 9 if Primary_site=="Unknown Primary"
replace primsitenum = 10 if Primary_site=="Thyroid"
replace primsitenum = 11 if Primary_site=="Other Site"

label variable primsitenum "Primary Site Numerically Coded"
label define primsitelab 1 "Oral Cavity" 2 "Oropharynx" 3 "Hypopharynx" 4 "Larynx" 5 "Nasopharynx" 6 "Paranasal Sinus" 7 "Skin"  8 "Salivary Gland" 9 "Unknown Primary" 10 "Thyroid" 11 "Other Site" 99 "Not Stated"
label values primsitenum primsitelab
----

As inelegant as this is, it works. The structure of this code leads me to think that it can be rewritten far simpler using a foreach loop. I am a relative neophyte with Stata and have just begun to explore the use of -foreach- and -forvalues-. I've written the following code as a first attempt:

----
gen primsitenum = .

local x Oral Cavity Oropharynx Hypopharynx Larynx Nasopharynx Paranasal Sinus Skin Salivary Gland Unknown Primary Thyroid Other Site

forvalues n = 1/11 {
	replace primsitenum = `n' if Primary_site =="`x'"
}
----

This loop executes without any errors, but does not produce any usable output (I get 11 consecutive remarks of "0 real changes made"). I feel that I'm close to solving this problem, but I clearly don't know enough to cross the finish line. I've searched extensively in -help- and online, but nothing I've read thus far has provided me with a "Eureka!" moment. Any assistance would be greatly appreciated.


Thanks,
Steve
~~~~~~~~~~~~~~~~~~~~
Steve Nakoneshny
Research Assistant
Ohlson Research Initiative
University of Calgary - Faculty of Medicine
HRIC 2A02
3280 Hospital Dr. NW
Calgary AB T2N 4Z6
Tel: (403) 220-4347
Fax: (403) 270-3145
www.ohlsonresearch.ca





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

--
--------------------------------------------------------------
Nicholas Winter                                 434.924.6994 t
Associate Professor                             434.924.3359 f
Department of Politics                  nwinter@virginia.edu e
University of Virginia          faculty.virginia.edu/nwinter w
S385 Gibson Hall, South Lawn
*
*   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/


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