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: Remove numbers from variable name


From   "Nick Cox" <n.j.cox@durham.ac.uk>
To   <statalist@hsphsun2.harvard.edu>
Subject   RE: st: Remove numbers from variable name
Date   Tue, 29 Jun 2010 12:29:39 +0100

Excellent point. And my silly mistake. So, we should reverse the
testing: 

foreach v of var question* { 
	if regexm("`v'", "^question[1-9][0-9].*") { 
		local newname = substr("`v'", 11, .) 
		rename `v' `newname' 
	}
	else if regexm("`v'", "^question[1-9].*") { 
		local newname = substr("`v'", 10, .) 
		rename `v' `newname' 
	}
	else di "`v': problematic name" 
}

I doubt that is foolproof too, but it should help. 

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

Martin Weiss
Sent: 29 June 2010 12:23
To: statalist@hsphsun2.harvard.edu
Subject: AW: st: Remove numbers from variable name


<> 

But careful! A "two-digit- question" would comply with the if-branch in
Nick`s solution as well. So I am afraid it would not make it to the
else-branch:

*************
di in r regexm("question16haveyouever", "^question[1-9].*")
*************

Nick Cox

In terms of the other question, regular expressions offer one way to
distinguish one from two digits: 

foreach v of var question* { 
	if regexm("`v'", "^question[1-9].*") { 
		local newname = substr("`v'", 10, .) 
		rename `v' `newname' 
	}
	else if regexm("`v'", "^question[1-9][0-9].*") { 
		local newname = substr("`v'", 11, .) 
		rename `v' `newname' 
	}
	else di "`v': problematic name" 
}

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

Martin Weiss

" Does not -subinstr- work for string observation, and not variable
names?"

-subinstr- substitutes parts of strings within strings. Since a variable
name is just a string, I can use it for your purposes:

*************
clear*
gen question5doyouhave=""
gen question6areyou=""

foreach var of varlist _all{
	loc newname = substr(subinstr("`var'","question","",1),2,.)
	rename `var' `newname'
}
*************

For the -varname-s containing two digits, you would have to change the
code
to "),3,.)" at the end of the -local- line...

Rasika Raghavan

Richard,

Thanks. It worked out fine. Can you suggest though a way in which I
don't have to specify the variables? Why I am asking is that, for
single digit questions it would be predrop(10) and for two digit
question numbers, it would be predrop(11). While it was easy in my
case, I can think of situations where this might work out to be
tedious.

Martin,

The "are you" was a typo. But thanks, I had not realized something
like -strtoname- existed.

I did not quite follow "For your substitution, look at -subinstr()-.
Why not put the question in the -var label- or a -note- to the
variable?"

Does not -subinstr- work for string observation, and not variable names?


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