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.

Re: st: Macro parsing question.

 From Amadou DIALLO To statalist@hsphsun2.harvard.edu Subject Re: st: Macro parsing question. Date Thu, 14 Feb 2013 19:07:57 +0100

```Dear Nick,

Indeed both, I guess. What I don't understand, why the logic of this
rule is not applying when in a loop mode:

- foreach i of loc list1 {
- foreach k of loc list2 {
- if "`i'" == "`k'" local d = cond("a" == "c", "%", "Value")
= if "a" == "a" local d = cond("a" == "c", "%", "Value")
- di "`d'"
= di "Value"
Value
- }
- if "`i'" == "`k'" local d = cond("a" == "c", "%", "Value")
= if "a" == "b" local d = cond("a" == "c", "%", "Value")
- di "`d'"
= di "Value"
Value
- }
- if "`i'" == "`k'" local d = cond("a" == "c", "%", "Value")
= if "a" == "c" local d = cond("a" == "c", "%", "Value")
- di "`d'"
= di "Value"
Value
- }
- }

Here:
= if "a" == "a" local d = cond("a" == "c", "%", "Value")
- di "`d'"
= di "Value"
Value

"a" == "a" so why d evaluates to "Value"?

2013/2/14, Nick Cox <njcoxstata@gmail.com>:
> In turn I don't understand this new question.
>
> It seems that you don't understand the code you have written or my
> explanation of why the results it gives are perfectly expectable;
> indeed both.
>
> Perhaps you should explain what you want the code to do, because it is
> evidently not doing it.
>
> Nick
>
> On Thu, Feb 14, 2013 at 4:12 PM, Amadou DIALLO <stata.diallo@gmail.com>
> wrote:
>> Thanks Nick,
>> I have not quite understand your answer. The thing, I have to include
>> the evaluation within a loop. Why, when inserting in the loop this is
>> not working?
>> Regards.
>> Bachir.
>>
>> 2013/2/14, Nick Cox <njcoxstata@gmail.com>:
>>> That's correct, and consistent with my previous answer. Whatever is
>>> done last determines the value of -d-. Here you do one thing, and the
>>> last is also the first. In the loop, you do several things, and the
>>> last is the only one that has a lasting effect.
>>>
>>> Nick
>>>
>>> On Thu, Feb 14, 2013 at 9:44 AM, Amadou DIALLO <stata.diallo@gmail.com>
>>> wrote:
>>>> Also, when I do it in the command line, I obtain what I want:
>>>>
>>>> . if "a" == "a" loc d %
>>>>
>>>> . else loc d Value
>>>>
>>>> . di "`d'"
>>>> %
>>>>
>>>>
>>>>> Hi,
>>>>> I spent the night programming some stuffs but cannot understand why I
>>>>> don't obtain the expected results. I was expecting "%" but got
>>>>> "Value". What am I doing wrong?
>>>>>
>>>>>       noi se tr on
>>>>>       loc list1 a
>>>>>       loc list2 a b c
>>>>>       loc d
>>>>>       foreach j of loc list1 {
>>>>>          foreach k of loc list2 {
>>>>>             if "`j'" == "`k'" loc d %
>>>>>             else loc d Value
>>>>>          } // foreach k
>>>>>                 }
>>>>>       di "`d'"
>>>>>
>>> *
>>> *   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/
>>>
>>
>>
>> --
>> Senior Economist, AfDB.
>> a.b.diallo@afdb.org
>> +21671101789
>> *
>> *   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/
>

--