Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
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 |
GreetingsI 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 dThe 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/