Stata The Stata listserver
[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

Re: st: RE: Macro questions. (Again).


From   Ulrich Kohler <kohler@wz-berlin.de>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: RE: Macro questions. (Again).
Date   Wed, 11 Aug 2004 16:02:23 +0200

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

adiallo5@worldbank.org 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.
>
>
>
>
>
>                       adiallo5@worldbank.org
>                       Sent by:                         To:      
> statalist@hsphsun2.harvard.edu owner-statalist@hsphsun2.        cc:      
> owner-statalist@hsphsun2.harvard.edu, statalist@hsphsun2.harvard.edu
> 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"
>
>                       <n.j.cox@durham.ac.uk>           To:
> <statalist@hsphsun2.harvard.edu>
>                       Sent by:                         cc:
>
>                       owner-statalist@hsphsun2.        Subject:  st: RE:
> Macro questions.
>                       harvard.edu
>
>
>
>                       08/10/2004 06:51 PM
>
>                       Please respond to
>
>                       statalist
>
>
>
>
>
>
>
>
>
> adiallo5@worldbank.org
>
> > 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/

-- 
kohler@wz-berlin.de
+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/



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