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]

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/

**References**:**Re: st: Remove numbers from variable name***From:*Rasika Raghavan <rasikarag@gmail.com>

**AW: st: Remove numbers from variable name***From:*"Martin Weiss" <martin.weiss1@gmx.de>

**RE: st: Remove numbers from variable name***From:*"Nick Cox" <n.j.cox@durham.ac.uk>

**AW: st: Remove numbers from variable name***From:*"Martin Weiss" <martin.weiss1@gmx.de>

- Prev by Date:
**Re: st: Remove numbers from variable name** - Next by Date:
**AW: st: Remove numbers from variable name** - Previous by thread:
**AW: st: Remove numbers from variable name** - Next by thread:
**AW: st: Remove numbers from variable name** - Index(es):