Bookmark and Share

Notice: On March 31, it was announced that Statalist is moving from an email list to a forum. The old list will shut down at the end of May, and its replacement, statalist.org is already up and running.


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

Re: st: Re: Macro escape inside a macro


From   "Michael N. Mitchell" <Michael.Norman.Mitchell@gmail.com>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: Re: Macro escape inside a macro
Date   Wed, 29 Sep 2010 01:42:33 -0700

Greetings

I think that the -display- command is fooling you about the contents of the macro -x-. Consider this example (based on yours), but instead I will use the -macro list- command in addition to -display-.

* Assign the macro to x
.   local x "\`d'"

* Now see what it contains
. macro list
(some output omitted)
_x:             `d'

Note that _x is the way of -macro list- saying that x is a local macro and it contains `d'.

* Now use the -display- command, it looks empty
. display "`x'"


The display command shows us the contents of -"`x'" which then resolves to "`d'" which then resolves to nothing since their is no macro named `d'. So, let's create such a macro.

. local d This is the macro d

* Now what does macro list show

. macro list
(some output omitted)
_d:             This is the macro d
_x:             `d'

Note now what happens when we display "`x'"...

. display "`x'"
This is the macro d

The macro "`x'" is resolved to contain "`d'" which is then resolve to contain "This is the macro d" which is then displayed.

I suspect that this still may leave you short of solving your problem. If so, perhaps you could post more about the exact problem you are facing so we can help further.

Best regards,

Michael N. Mitchell
Data Management Using Stata      - http://www.stata.com/bookstore/dmus.html
A Visual Guide to Stata Graphics - http://www.stata.com/bookstore/vgsg.html
Stata tidbit of the week         - http://www.MichaelNormanMitchell.com



On 2010-09-29 1.19 AM, Aleksander Rutkowski wrote:
Eric, Nic, thank you for your replies. It appears that the beginning
of my original message did not reach statalist. I am resending it --
see below. BTW, I have read
http://www.stata.com/support/faqs/lang/backslash.html but it shows
only simple actions with -display- command, which work fine, but my
problem is more complicated. I want to delay substitution of a macro
which is nested in another macro -- see below. Why backslash works
when used with -display- but not with -local-? (In my example below I
want to expand x but not d). I tried to use -macval()- but I did not
succeed. The description of -macval()- in the [P] manual is very brief
and there is no example with a full syntax. Maybe somebody could give
an example how -macval()- should be used?

-- original message below --

Why:
   di "\`d'"
displays:
   `d'
but:
   local x "\`d'"
   di "`x'"
displays empty string?

How can I escape macro (i.e. prevent macro substitution) inside
another macro (i.e. when defining another macro)?

Aleksander Rutkowski
*
*   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/


© Copyright 1996–2014 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   Site index