Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: st: How to apply a command to numeric variables only
From
"Paul O'Brien" <[email protected]>
To
[email protected]
Subject
Re: st: How to apply a command to numeric variables only
Date
Tue, 29 May 2012 21:58:42 +0100
These are the results:
. ds srhcareactivity1-srhcareactivity6 , has(type numeric)
srhcareact~4 srhcareact~5 srhcareact~6
. foreach var in `r(varlist)' {
2. decode `var', generate(string)
3. drop `var'
4. rename string `var'
5. }
srhcareactivity4 not labeled
r(182);
===
. findname srhcareactivity1-srhcareactivity6 , type(numeric)
srhcareact~4 srhcareact~5 srhcareact~6
. foreach var in `r(varlist)' {
2. decode `var', generate(string)
3. drop `var'
4. rename string `var'
5. }
srhcareactivity4 not labeled
r(182);
===
. foreach var of varlist srhcareactivity1-srhcareactivity6{
2. capture decode `var', generate(string)
3. if _rc == 0 {
4. drop `var'
5. rename string `var'
6. }
7. }
unrecognized command: capture invalid command name
r(199);
===
. ds srhcareactivity1-srhcareactivity6 , has(type numeric)
srhcareact~4 srhcareact~5 srhcareact~6
. foreach var of varlist srhcareactivity1-srhcareactivity6{
2. capture decode `var', generate(str)
3. if _rc == 0 {
4. drop `var'
5. rename string `var'
6. }
7. }
but not decoded:
srhcareactivi~4 byte %8.0g SRHCareActivity4
srhcareactivi~5 byte %8.0g SRHCareActivity5
srhcareactivi~6 byte %8.0g SRHCareActivity6
Paul
On 29 May 2012, at 11:00, Nick Cox wrote:
> You are reporting problems but not the exact commands you tried. I
> could try guessing what you did wrong, and whether it is my fault or
> yours, but it is really is much better if you show your code.
>
> Nick
>
> On Tue, May 29, 2012 at 10:55 AM, paul o'brien <[email protected]> wrote:
>> Thanks NIck,
>>
>> I encounter a problem with each of these suggestions:
>>
>> With ds and findname I get: srhcareactivity4 not labeled
>>
>> With -capture- inside the loop I get: variable string not found
>>
>> On keeping the label I get: unrecognized command: local invalid =
>> command name
>>
>> Can you help?
>>
>> Thanks for all your very useful advice on the List.
>>
>> Paul
>>
>>
>> On 29/05/2012, Paul O'Brien <[email protected]> wrote:
>>> Thanks NIck,
>>>
>>> I encounter a problem with each of these suggestions:
>>>
>>> With ds and findname I get: srhcareactivity4 not labeled
>>>
>>> With -capture- inside the loop is get: variable string not found
>>>
>>> On keeping the label I get: unrecognized command: local invalid command
>>> name
>>>
>>> Is there a tweak we are missing?
>>>
>>> Paul
>>>
>>> On 29 May 2012, at 08:27, Nick Cox wrote:
>>>
>>>> Similar questions arise often on this list. In your case one solution
>>>> is to -destring- the string variables before the loop, but then the
>>>> loop will convert back, so that does not appeal.
>>>>
>>>> Another is to select numeric variables beforehand. -ds- will do this
>>>>
>>>> ds srhcareactivity1-srhcareactivity6 , has(type numeric)
>>>>
>>>> foreach var in `r(varlist)' {
>>>>
>>>> -findname- (SJ) can do more than -ds- (fact) and has a better syntax
>>>> (opinion), but its use is very similar here.
>>>>
>>>> findname srhcareactivity1-srhcareactivity6 , type(numeric)
>>>>
>>>> foreach var in `r(varlist)' {
>>>>
>>>> Another way is to use -capture- inside the loop.
>>>>
>>>> foreach var of varlist srhcareactivity1-srhcareactivity6{
>>>> capture decode `var', generate(string)
>>>> if _rc == 0 {
>>>> drop `var'
>>>> rename string `var'
>>>> }
>>>> }
>>>>
>>>> Is it "string" a reserved word? (I am away from manuals at the
>>>> moment.) I'd use something different here, even if not.
>>>>
>>>> Keeping the variable label can be done with extended macro functions,
>>>> mentioned frequently on this list.
>>>>
>>>> foreach var of varlist srhcareactivity1-srhcareactivity6{
>>>> local varlabel : variable label `var'
>>>> capture decode `var', generate(string)
>>>> if _rc == 0 {
>>>> drop `var'
>>>> rename string `var'
>>>> label var `var `varlabel'
>>>> }
>>>> }
>>>>
>>>> See -help extended fcn-. Or -help macro- first.
>>>>
>>>> Nick
>>>>
>>>> On Tue, May 29, 2012 at 6:28 AM, Paul O'Brien <[email protected]>
>>>> wrote:
>>>>> I want to do a foreach command to convert numeric variables to string
>>>>> before a merge. Only some of the variables are numeric and which ones
>>>>> varies with each database.
>>>>>
>>>>> foreach var of varlist srhcareactivity1-srhcareactivity6{
>>>>> decode `var', generate(string)
>>>>> drop `var'
>>>>> rename string `var'
>>>>> }
>>>>>
>>>>> Error message: not possible with string variable.
>>>>>
>>>>> I have tried using capture to ignore the error.
>>>>>
>>>>> How can I restrict the command to numeric variables only?
>>>>>
>>>>> By the way, is there a way to keep the variable label which is lost when
>>>>> I use generate.
>>>>>
>>>>
>>>> *
>>>> * 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/
>>>
>>> -------------------------------
>>> Dr Paul O'Brien
>>> Raymede Clinic
>>> Westside Contraception and Sexual Health Services
>>> Central London Community Healthcare
>>> Exmoor St
>>> London
>>> W10 6DZ
>>> UK
>>> +44 (0)20 8962 4450
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>> *
>> * 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/
>
> *
> * 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/
-------------------------------
Dr Paul O'Brien
Raymede Clinic
Westside Contraception and Sexual Health Services
Central London Community Healthcare
Exmoor St
London
W10 6DZ
UK
+44 (0)20 8962 4450
*
* 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/