[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

RE: st: Programming Problem: How to prevent macro substitution

From   "Nick Cox" <>
To   <>
Subject   RE: st: Programming Problem: How to prevent macro substitution
Date   Wed, 16 Jul 2008 17:11:37 +0100

I agree. In fact, I'd go one step further: 

foreach u of numlist 0/2{
  local xlist `xlist'|ldep`u' 

Sometimes the quotes just make things more complicated. 


Eva Poen

take it in steps and it works:

foreach u of numlist 0/2{
  local xlist "`xlist' " "|" "`" "ldep`u'" "'"

-di "`xlist'"- returns|`ldep0'|`ldep1'|`ldep2'

on my machine.

2008/7/16 Christoph Birkel <>:

> I want to program a loop which produces a macro `xlist' containing a
list of
> dummy variable interaction expansion expressions with temporary
> names `ldep0' , `ldep1' etc. as a string . For this purpose I wrote:
> foreach u of numlist 0/`y2'{
>  local ldep`u' "ldep`u'"
> local xlist "`xlist'|``ldep`u'''"
> }
> The resulting macro should contain an expression like "|`ldep0'
>|`ldep1'|`ldep2' "  (when  `y2'  contains 2)  which
can be
>  used as argument in -xi: reg-, as in: xi: reg yvar `xlist' .
> temporary variables `ldep0' and so on, corresponding to the macros are
> generated later in  a separate loop.)
> What actually happens, is that, due to the single quotation marks, the
> macros containing the names of the temporary variables are subsituted
> their content (which should not happen), so the content of the
> macro is "|ldep0|ldep1|ldep2 ", which cannot be
> to refer to temporary variables. For the same reason, it is not
possible to
> define a local macro with a string as content which starts and ends
> quotation marks. I found no way to avoid the unintended macro
> using "\" or compound quotes. Any recommendation is highly

*   For searches and help try:

© Copyright 1996–2017 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index