I don't know why you like the solution with cond(), but I prefer a solution
with -inlist()- or -inrange()- for tasks like this this. With inlist() your
your code-snippet might be coded like this:
gen byte origin = 7 if nation == 3
replace origin = 10 if inlist(nation,8,12,69,139,141)
replace origin = 8 if inlist(nation,14,82)
...
Others might propose a solution with -recode- but thats a matter of taste.
In any case: see -help inlist- or -help recode- for more.
Annelies Vos wrote:
> Dear all,
> in the FAQs I found the following very useful recommendation:
> instead of:
> . generate byte a = 1 if y <= 20
> . replace a = 2 if y > 20 & y <= 30
> . replace a = 3 if y > 30 & y <= 40
> . replace a = 4 if y > 40 & y <.
>
> do the following:
>
> . #delim ;
> . generate byte a =
> cond(y<=20, 1,
> cond(y<=30, 2,
> cond(y<=40, 3,
> cond(y<., 4,
> . ))));
>
> However, the variable I want to use it for (nationality) has many
> values (every country in the world), which should be recoded into
> countrygroups. I don't really like the idea of having to count the
> number of "opening brackets": "(" , to know with how many "closing
> brackets": ")" I should end. Is there any easier solution for this?
>
> to explain a piece of my syntax:
> > #delim;
> > generate byte origin =
> > cond(natio==3, 7,
> > cond(natio==8, 10,
> > cond(natio==12, 10,
> > cond(natio==14, 8,
> > cond(natio==28, -9,
> > cond(natio==54, 6,
> > cond(natio==69, 10,
> > cond(natio==82, 8,
> > cond(natio==139, 10,
> > cond(natio==141, 10,
>
> ...etcetera
>
> ...which I would like to end on another way than:
> > . ))))))))))
many regards
uli
--
[email protected]
+49 (030) 25491-361
*
* 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/