Thank you all for the quick reply! It really does make a difference.
Socrates
In message <031173627889364697C50B3B266CBB8A01C07BD4@GEOGMAIL.geog.ad.dur.ac.uk> statalist@hsphsun2.harvard.edu writes:
> Answers to date support my prejudice that -count-
> is one of the most neglected Stata commands.
>
> The problem specified is to -drop- variables if
> and only if all values are zero or missing. Hence
> no values have other values. This then leads
> directly to the solution
>
> foreach v of var cross* {
> qui count if !(`v' == 0 | missing(`v'))
> if r(N) == 0 drop `v'
> }
>
> or, if you prefer,
>
> foreach v of var cross* {
> qui count if (`v' == 0 | missing(`v'))
> if r(N) == _N drop `v'
> }
>
> If you knew for certain that you had no extended
> missings .a ... .z, this could be
>
> foreach v of var cross* {
> qui count if !inlist(`v', 0, .)
> if r(N) == 0 drop `v'
> }
>
> or, if you prefer,
>
> foreach v of var cross* {
> qui count if inlist(`v', 0, .)
> if r(N) == _N drop `v'
> }
>
>
> Note that the -summarize- in other solutions
> could be made -, meanonly- with no loss and
> some small gain in efficiency. The criterion
> used by Kit that r(max) == 0 & r(sd) == 0 implies
> that all non-missings are 0 could be replaced
> by checking r(min) == r(max) == 0.
>
> Nick
> n.j.cox@durham.ac.uk
>
> Kit Baum
>
> > Unfortunately that doesn't work either.
> > If you create a variable that is wholly missing, you will see that r
> > (max) is not defined, so your if condition
> > looks like
> >
> > if == 0
> >
> > which is surely invalid syntax. You could figure this out if you did
> >
> > set trace on
> >
> > and then ran your code.
> >
> > Given that a variable that is wholly missing and a variable that is
> > always zero have quite different characteristics (for instance, a
> > variable that is zero or missing has r(sum) = 0, but that is not
> > sufficient to conclude that the variable meets your specs) it might be
> > easiest to do something like
> >
> > foreach v of varlist jun* {
> > qui su `v'
> > if r(N)==0 {
> > drop `v'
> > }
> > if r(sd) == 0 & r(max) == 0 {
> > capture drop `v'
> > }
> > }
> >
>
> Phil said
>
> > -help drop- shows that the syntax:
> >
> > -drop varlist-
> >
> > does not permit an -if- qualifier.
> >
> > Perhaps:
> >
> > foreach var of varlist cross* {
> > qui su `var'
> > if `r(max)'==0 {
> > drop `var'
> > }
> > }
>
> Socrates Mokkas
>
> > > I have a problem with dropping variables. This is my small loop:
> > >
> > > foreach var of varlist cross* {
> > > qui su `var'
> > > drop `var' if `r(max)'==0
> > > }
> > >
> > > Why is the invalid syntax comming up? What I want to do is
> > to drop
> > variables
> > > ( included in the varlist cross*) if they have values only of
> > zeros or
> > > missing values. Am I missing the obvious here?
>
>
> *
> * 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/