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

From |
[email protected] |

To |
[email protected] |

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

Date |
Wed, 11 Aug 2004 08:27:46 -0400 |

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/

**Follow-Ups**:**Re: st: RE: Macro questions. (Again).***From:*Ulrich Kohler <[email protected]>

- Prev by Date:
**Re: st: Help** - Next by Date:
**Re: st: RE: Macro questions. (Again).** - Previous by thread:
**st: Re: margfx** - Next by thread:
**Re: st: RE: Macro questions. (Again).** - Index(es):

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