Thanks for adding extra detail.
My comments still stand.
What you tried is legal,
but will not do what you hope it does.
As I pointed out in another posting,
Richard's suggestion is just illegal.
"71600"/"71699" is not a legal string
expression, so violates -replace-'s
syntax.
Your guess that there should be
a way of specifying a range of string
values was correct. In addition to
my earlier suggestion, consider
forval i = 1/4 {
replace newvar = 1 if inrange(var`i',"71600","71699")
}
Nick
[email protected]
Suzy
> The do believe the variables are string variables - the
> variable font
> is in red and many other values within the variable look
> like strings
> (eg. v8123, 3401-, e78345).
>
> Each of these string variables may or may not have the same
> value for
> particular observations. For example, stringvar1 may have "71611" for
> observation #10 and stringvar2 might have "71611" for observation #2
> and stringvariable3 might have "71611" for observation # 3,000. and
> stringvar4 might not have any "71611" for any observation.
>
> I'm creating a newvar which can account for all the "71611" values
> across all the string variables. In other words, the newvar must
> include all values from "71600" to "71699" across all the
> stringvars (of
> which any stringvar may or may not include these values).
>
> The reason I thought it was impossible to have no changes is because
> for example, the value of "71623" across all string variables
> resulted
> in 10 observations for my newvar. Newvar =44 is just a category I
> created to account for the value of "71623" across all the string
> variables. [output eg. replace newvar=44 if var1 =="71623" |
> var2=="71623" | var33=="71623" | var4=="71623" (10 real changes made)]
>
> So for example, newvar=1 could have represented all the
> "71600" values
> across all string variables, whereas newvar=2 could represent all
> "71601" values across all string variables and newvar=3 could
> represent
> all "71602" values across all string variables, etc, etc...
>
> These are just examples of what's been done - not actual
> categories per
> se. Thus, newvar is a categorical variable that is
> accounting for all
> the values "71600 to 71699" across all the string variables.
> The code I
> had used to account for all of it in one shot didn't work,
>
> replace newvar=1 if var1 =="71600/71699" |
> var2=="71600/71699" | var3=="71600/71699" |
> var4=="71600/71699" (0 changes made)
>
> but Richard's idea of closing each value in parenth might work...I
> haven't tried it yet.
>
> replace newvar=1 if var1 =="71600"/"71699" |
> var2=="71600"/"71699" | var3=="71600"/"71699" | var4=="71600"/"71699"
>
> Hope this e-mail explanation is easier to understand. I am
> using Stata 9 (windows xp).
>
> Thank you.
>
>
>
>
>
> Nick Cox wrote:
>
> >It's not impossible at all. Stata takes literally
> >what you include between double quotes " ". Evidently
> >you had no strings with values like "71600/71699".
> >
> >However, it may be that what you want is accomplishable
> >by something like
> >
> >forval i = 1/4 {
> > replace newvar = 1 if inrange(real(var`i'),71600,71699)
> >}
> >
> >but like Richard Williams I am not completely clear from your
> >examples what exactly you do want.
> >
> >Nick
> >[email protected]
> >
> >Suzy
> >
> >
> >
> >>I created a new variable (newvar) that is supposed to be a
> collection
> >>of sequential values from different string variables. The
> >>values that
> >>are included in the new variable go from 71600 to 71699. I've been
> >>doing it manually for hours- replacing value after value.
> see example
> >>for value # 71623:
> >>
> >>replace newvar=44 if var1 =="71623" | var2=="71623" |
> >>var33=="71623" |
> >>var4=="71623"
> >>(10 real changes made)
> >>
> >>
> >>I tried to do it this way - see example:
> >>
> >>replace newvar=1 if var1 =="71600/71699" | var2=="71600/71699" |
> >>var3=="71600/71699" | var4=="71600/71699"
> >>(0 changes made)
> >>
> >>But no changes occurred, which is impossible.
> >>
> >>I'm hoping there is a simple and quick syntax for what I'd
> >>like to do.
> >>Ideally if newvar =1 with all the values from 71600 t0
> 71699 located
> >>from the existing variables (1-4) included in newvar - then
> >>that would
> >>be less painful than what I've been doing.
> >>
> >>Any simple solution?? explicit code is appreciated!!
*
* 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/