Use the extended macro function -subinstr-. For example, if you define the
local macro "macro" as follows:
. local macro "var1 var2"
You can replace "var1" in this macro with an empty string like follows:
. local macro: subinstr local macro "var1" ""
hope this helps
uli
[email protected] wrote:
> Nick,
> When I talk about working inside macros, I am thinking of something
> like this:
> I know that one can increment a macro by doing: local myvars "`myvars'
> var1" But why can't we REMOVE var1 from the macro myvars?
> Something like (it's just an example, but maybe you have another syntax):
>
> local myvars "`myvars' , -var1"
>
> (where -var1 is intented to tell Stata to remove var1 from myvars).
>
> This could sound odd but sometimes, macros contain a lot of variables and
> it is painfull to create other macros that are just part of them (what I
> call "submacors").
>
> Best regards.
> Amadou.
>
>
>
>
>
> [email protected]
> Sent by: To:
> [email protected] owner-statalist@hsphsun2. cc:
> [email protected], [email protected]
> harvard.edu Subject: Re: st: RE: Macro questions.
>
>
> 08/10/2004 06:59 PM
> Please respond to
> statalist
>
>
>
>
>
>
>
>
> Thanks Nick.
> This will spare me a lot of effort and time.
> And...it is true I love Stata macros.
> It makes life so easier... when one
> get used to them.
> Have a good night by the way.
> Amadou.
>
>
>
>
> "Nick Cox"
>
> <[email protected]> To:
> <[email protected]>
> Sent by: cc:
>
> owner-statalist@hsphsun2. Subject: st: RE:
> Macro questions.
> harvard.edu
>
>
>
> 08/10/2004 06:51 PM
>
> Please respond to
>
> statalist
>
>
>
>
>
>
>
>
>
> [email protected]
>
> > I have some questions about macros.
> >
> > 1/ I wonder how to count the number of variables in a macro.
> > I try the macro extended function (word count) but it doesn't work.
> > For example, if I have:
> > local myvars "var1 var2 var3 var4"
> > then `myvars' contains 4 variables.
> > But I do not know how to create a macro that contains the value 4.
>
> I go
>
> . local myvars "var1 var2 var3 var4"
>
> . local nv : word count `myvars'
>
> . di `nv'
> 4
>
> and Stata tells me 4. (The macro contains not four
> variables, but the names of four variables.)
> What are you doing wrong? I have to guess.
> Perhaps you are doing something like
>
> . local nv : word count "`myvars'"
>
> . di `nv'
> 1
>
> Here you must remember Stata's definition of
> a word. Stata by default parses on white space meaning
> that
>
> Amadou loves Stata macros
>
> would be considered by Stata to be 4 words. So far,
> so good. But Stata has another rule: double quotes
> bind tighter than white space separates, so
>
> "Amadou loves Stata macros"
>
> is just _one_ word. This is just Stata's sense of
> a word; forget here what you know about the grammar of
> any ordinary language. Now, when you defined
>
> . local myvars "var1 var2 var3 var4"
>
> the " " were just ornamental; Stata took
> them as delimiters, not as part of your
> definition of the local myvars (and you
> could have omitted them). But if you go
>
> . local nv : word count "`myvars'"
>
> the " " are not ornamental at all; they
> are working hard to bind what follows
> -: word count- into one word.
>
> > 2/ Suppose several datasets containing the same variable floor indexed
> > 1, 2, 3, etc.... Floor* number varies with datasets.
> > I want to create the macro myfloor
> > local myfloor "floor*"
> > but then, I do not know how to create the macro containing
> > the number of floor
> > as in question 1.
>
> This question was asked earlier today. As said then,
> the number of variables is not often an issue. Nevertheless,
>
> unab floor : floor*
> local nfloor : word count `floor'
>
> > 3/ How to work "inside" macros?
> > suppose you have the following: local "var1 var2 var3 .....varN"
> > suppose later in your dofile you want to do some tables on
> > only - say 20-
> > variables of the macro.
> > Is it possible to just choose them (perhaps by specifying
> > their position IN
> > the macro)
> > without creating other (sub)macros?
>
> The term submacro is yours; I don't know what you mean by it.
> There are several ways of doing this, but they usually
> involve creating other macros.
>
> > 4/ Finally my last question is how to merge/append several datasets?
> > Suppose you have :
> > local mydata "data1 data2 data3 data4 data5"
> > foreach if i of local mydata {
> > foreach j of local mydata {
> > append `i' using `j'
> > }
> > }
> >
> > How to avoid data1 being appended twice?
>
> Various ways. Here's one.
>
> Start with the second word in the macro.
>
> local mydata "data1 data2 data3 data4 data5"
> local nsets : word count `mydata'
> tokenize `mydata'
>
> use `1'
> forval i = 2/`nsets' {
> append using ``i''
> }
>
> *
> * For searches and help try:
> * http://www.stata.com/support/faqs/res/findit.html
> * http://www.stata.com/support/statalist/faq
> * http://www.ats.ucla.edu/stat/stata/
>
>
>
>
> *
> * For searches and help try:
> * http://www.stata.com/support/faqs/res/findit.html
> * http://www.stata.com/support/statalist/faq
> * http://www.ats.ucla.edu/stat/stata/
>
>
>
>
> *
> * For searches and help try:
> * http://www.stata.com/support/faqs/res/findit.html
> * http://www.stata.com/support/statalist/faq
> * http://www.ats.ucla.edu/stat/stata/
--
[email protected]
+49 (030) 25491-361
*
* For searches and help try:
* http://www.stata.com/support/faqs/res/findit.html
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/