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: Minor bug in -labvalclone- by NJC
From
Sergiy Radyakin <[email protected]>
To
"[email protected]" <[email protected]>
Subject
Re: st: Minor bug in -labvalclone- by NJC
Date
Thu, 21 Nov 2013 20:39:49 -0500
Hi, Nick,
if you are on it now, why not combine these 12 programs into
labutil.ado with sub-commands? labutil copy, labutil mask, etc. Just a
bit fewer files to manage.
I've noticed you are trying to also check for labelling integers in
several of the programs from the -labutil- package. I'd rather have
Stata to issue this error message. For example in -labmask-:
* integers only!
capture assert `varlist' == int(`varlist') if `touse'
if _rc {
di as err "may not label non-integers"
exit 198
}
Stata would still stumble at the "label define ...., modify" later on,
with similar message. But if you want to handle all invalid cases in
advance of that, being integer is not sufficient to be 'label-able':
sysuse auto, clear
egen double order = rank(-mpg), unique
replace order=100000000*order
labmask order, val(make)
so inrange(`varlist',c(minlong), c(maxlong)) becomes handy.
But I'd rather ditch the check unless it is preventing something else
to go wrong in the program.
Best, Sergiy
On Thu, Nov 21, 2013 at 8:04 PM, Nick Cox <[email protected]> wrote:
> Thanks to Sergiy for the public heads-up.
>
> I will get it fixed.
> Nick
> [email protected]
>
>
> On 22 November 2013 00:45, Sergiy Radyakin <[email protected]> wrote:
>> Bug in -labvalclone- by NJC
>> http://fmwww.bc.edu/repec/bocode/l/labvalclone.ado
>>
>> ===Example:
>> clear
>> label define a 1 "US" 2 "UK" 3 "UA"
>> labvalclone a aa
>>
>> ===Output:
>> unrecognized command: laabel
>> r(199);
>>
>> ===Why does it happen:
>> Because replacing blindly code is not safe. Nick is trying to check
>> for this problem by having a safety check of the old argument earlier
>> in the program:
>> if "`old'" == "label" | "`old'" == "define"
>> but later is doing a replacement of a SUBSTRING, not a WORD-by-word replacement.
>>
>> ===Suggested fix:
>> Simply flank both args (old and new) with spaces:
>> local line: subinstr local line " `old' " " `new' "
>>
>> Best,
>> Sergiy Radyakin
>> *
>> * For searches and help try:
>> * http://www.stata.com/help.cgi?search
>> * http://www.stata.com/support/faqs/resources/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/faqs/resources/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/faqs/resources/statalist-faq/
* http://www.ats.ucla.edu/stat/stata/