Statalist


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

Re: st: advance a -foreach- loop?


From   Jeph Herrin <junk@spandrel.net>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: advance a -foreach- loop?
Date   Wed, 14 May 2008 09:05:58 -0400

Austin, Nick, thanks for the replies.

I think I should have been more specific about my list
of variables. I am processing several input files with this,
and in each all I know about the variables of interest is that
they have a given prefix. So in practice

  local biglist = "prfx_*"

Ie, I oversimplified in my example; the variables are actually

  prfx_payor_1
  prfx_payor_2
  prfx_payor_3
  ... etc

There are hundreds of variables in each file, and it would be far
more time consuming to go through and group them, especially as
I will be rerunning this routinely on files that someone else is
producing, with the variables changing potentially each time.

Also, because of the number of variables, I think expanding into
a macro and then indexing over the words will not work because of
the limit on macro length (right?).

However, I may have to next my loop inside another, and do some
preprocessing of -biglist- first.

thanks,
Jeph



Austin Nichols wrote:
Jeph Herrin <junk@spandrel.net>:
Can you not use -else- here?  I.e.
 foreach V of varlist `biglist' {
  gettype(`V')
  if `type'=="M" {
   <do stuff>
  }
  else {
   <do other stuff>
  }
 }

If you did want to reference variables by their number, and did -keep
`biglist'- first, you can refer to word `i' of `biglist' to get the
ith variable (see "Macro extended functions for parsing" in help
extended_fcn).

BTW, it might be more efficient to move the type "M" variables into a
separate macro to process separately, depending on how you are
choosing to handle all the variables in a particular group, e.g.
payor_1-payor_6.  E.g.

 foreach V of varlist `biglist' {
  gettype(`V')
  if `type'=="M" {
   <make list of variables related to `V' e.g. payor_1-payor_6>
   <and put the list in local `thislist' >
   loc mlist `" `mlist' "`thislist'" "'
  }
  else {
   <do other stuff>
  }
 }
 foreach V of varlist `mlist' {
  <now operate on each group of related vars>
 }

On Tue, May 13, 2008 at 3:45 PM, Jeph Herrin <junk@spandrel.net> wrote:
I have hundreds of variables that I need to loop through
and process. Some of them are grouped together because they
represent different options that are not mutually exclusive;
for example, "Insurance type: check all that apply:" has
results stored in:

  payor_1
  payor_2
  payor_3
  payor_4
  payor_5
  payor_6


I have a datum -type- associated with each that tells me it is part of a
"multiselect" (sic) question, so when I loop through all my variables:

 foreach V of varlist `biglist' {
       gettype(`V')
       if `type'=="M" {
               <do stuff>
       }
       .
       .
       .
 }

The ... handles every other types of variable. However, when I
<do stuff> I'd like to handle all the variables in that particular
group, eg, payor_1-payor_6. I can do this, but then I need to advance
the -foreach- to the variable *after* payor_6.

One thought I had was to reference the variables by their number, which
is available via -describe, number- (I'd have to -keep `biglist'- first)
but I'm not sure how to refer to a variable by its number, and can't
find any info on how to do so.

Does anyone see how to make this idea - or any other- work so I can skip
ahead in a -foreach- loop?
*
*   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/



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