Bookmark and Share

Notice: On March 31, it was announced that Statalist is moving from an email list to a forum. The old list will shut down on April 23, and its replacement, statalist.org is already up and running.


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: st: RE: looping up to a local macro


From   Nick Cox <n.j.cox@durham.ac.uk>
To   "'statalist@hsphsun2.harvard.edu'" <statalist@hsphsun2.harvard.edu>
Subject   RE: st: RE: looping up to a local macro
Date   Thu, 23 Jun 2011 16:40:10 +0100

You aren't obviously misunderstanding macros; you just don't need them as much as you think. 

There is no reference to -letter_sound- in the code segment you cite, so there is something that you have not explained. 

That said, you are missing some tricks. If you want a row mean, you can use 

egen ...  = rowmean(letter*) 

so that you do not need 

* to know how many variables are covered by the wildcard letter*

* to calculate totals and then counts for the row means. 

Nick 
n.j.cox@durham.ac.uk 

Michael Costello

Wow, this became a much bigger thing than I was anticipating!  Thanks
for all the interest though.  I guess I'm wondering if I am thinking
of the local macro correctly, in that it's a kind of proxy for some
value (in my case 50, 100, etc) which can have operations done unto
it, or if it's something else that I don't understand.

I manage ~30 databases.  Most of them need the same bits of code run
on them, but each has a different number of variables upon which that
code must be run.  For example:

Database 1 has variables letter1, letter2, letter3, . . . , letter100
Database 2 has variables letter1, letter2, letter3, . . . , letter50

I would like to create this "master cleaning file" which, after
establishing a local macro value of either 50 or 100, would do the
following:

**Section: Letter Names**
egen letter_score2=rowtotal(letter1-letter`letters'), missing
egen letter_attempted=rownonmiss(letter1-letter`letters')
gen letter_score_pcnt=letter_score/`letters'
gen letter_score_zero= (letter_score==0) if letter_score<.
gen letter_attempted_pcnt=letter_score/letter_attempted
gen clpm=round(letter_score/(1-(letter_time_remain/60)))

But the error I'm getting is: "letter_sound ambiguous abbreviation"
for the first line of the code


Sarah, the error i'm getting when I try to run a loop is "invalid syntax"
forvalues i = 1(1)`letters' {
   quietly: rename letter0`i' letter`i'
   quietly: recode letter`i' (9=.) (2=1) (1=0)
   * more lines of code here
}
invalid syntax


*
*   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/


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