Bookmark and Share

Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: st: destring command

From   Nick Cox <>
Subject   Re: st: destring command
Date   Mon, 26 Sep 2011 15:14:21 +0100

Paul is emphasising that double negative signs are not necessarily to
be treated as if they were negative signs.

Naturally, I agree.

Part way through my exchange with Abu on Saturday I noticed that he
had posted "--" not "-" but guessed, perhaps wrongly, that this was a
red herring, a typo or both.

However, the difference is lost on -destring-'s -ignore()- option.
Expanding on Paul's explanation, let's imagine that one of the values
in a string variable is "--42" (two negative signs there, for those
whose eyesight or monitor is not up to the job).

Any argument to -destring, ignore()- is just treated as a sequence of
characters. The effect of specifying -ignore(--)- is to remove "-"
signs once and then to (try to) remove them again. The second request
is clearly redundant but certainly not illegal.

So if you specify -ignore(--)- with "--42" both "-" characters are
removed and -destring- returns 42.

If you specify -destring- but not the -ignore()- option -destring-
refuses on "--42" unless you -force- the conversion and it then
returns missing.

As ignoring negative signs is almost always a very bad idea with
-destring- any way, the fact remains that -destring- without
-ignore()-  will spot the difference betweeen two negative signs and
one, which seems to be the main consideration here.

If you really want to ignore double negative signs but not single
negative signs, then it would be necessary to remove them before
applying -destring-. Paul's advice to do something like

. replace v13 = "" if v13 == "--"

leaves the question of what to do with something like "--42", for
which you would need something more like

. replace v13 = subinstr(v13, "--", "",.)


On Mon, Sep 26, 2011 at 2:37 PM, Seed, Paul <> wrote:
> Fundamentally, Nick is right in his advice to Abu.
> "-" should not be included in the ignore() option for -destring-.
> -destring- ignores individual characters, not
> text strings (whether separated by spaces of quotation marks).
> It is very useful if this is borne in mind.
> Before invoking Nick's suggestion,
> Abu should remove all unwanted occurrences of "--"
> This can be done by
>        replace v13 = "" if v13 == "--"
> A useful trick to use before -destring- is
> tab v13 if real(v13) == ""
> This will reveal all and only the values that do not come across correctly.
> Abu also gives a list of examples.
> I am not sure what to happen to two of them :
> - -1.388
> - -3.301
> Are these to be read as  1.388 or -1.388?
> He needs to specify precisely.
> He can use something like
>        replace v13 = "-1.388" if v13 == "- -1.388"
> Date: Sat, 24 Sep 2011 10:02:31 +0100
> From: Nick Cox <>
> Subject: Re: st: destring command
> Your problem is self-inflicted. As you are instructing -destring- to
> ignore "-", all negative signs are stripped.
> Nick
> On Sat, Sep 24, 2011 at 9:30 AM, Abu Camara <> wrote:
>> I am trying the following command to destring variables in the
>> IMF weo data just released. I imported it to Stata but all variables
>> become string.
>> When I use Stata's destring command, values that are negative becomes
>> positive, i.e. lose the negative sign.
>> Any help would be appreciated. A loop to do this task at once will
>> also be appreciated.
>> Command: destring v13, gen(yr1983) ignore(, n/a -- )

*   For searches and help try:

© Copyright 1996–2018 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index