Statalist


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

st: RE: by and missing values question


From   "Nick Cox" <n.j.cox@durham.ac.uk>
To   <statalist@hsphsun2.harvard.edu>
Subject   st: RE: by and missing values question
Date   Mon, 11 May 2009 13:13:38 +0100

Independently of the issues you raised, note that a bug lurks in this program. 

Your use of `1' and `2' commits you implicitly to specifying your varlist as two separate variable names, say 

logdiff foo bar 

If you, or a user of your program, specified 

logdiff a? 

because you had two variables -a1- and -a2-, say, then the program would fail, as `1' would be a? and `2' would be empty. 

You are relying on `1' and `2' being born as the first and second tokens typed after the command name. A safer programming practice would be to introduce an extra line 

tokenize "`varlist'" 

after the -syntax- statement, so that the program would still work either way. 

Finally, a further style comment. You introduce a local macro in the lines below, but it's not necessary. 

    loc diff = r(mean)
    
    di as text "Log Difference: " as result `diff'
    return scalar diff = `diff'

This could be condensed to 
   
    di as text "Log Difference: " as result r(mean) 
    return scalar diff = r(mean) 

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

Nikolaos Kanellopoulos

I have written the following very simple program

cap pr drop logdiff
program define logdiff , rclass byable(recall)

    syntax varlist(min=2 max=2) [if] [in] [fweight aweight] 

    version 8.0
    tempvar dif
    marksample touse 
    qui count 
    local N = r(N)

    qui count if `touse'
    if r(N) == 0 error 2000
    local n = r(N)

    qui gen `dif' = (`n'/`N')*abs(ln(`2') - ln(`1'))  if `touse'    
    qui su  `dif' if `touse' [`weight'`exp'] , meanonly
    loc diff = r(mean)
    
    di as text "Log Difference: " as result `diff'
    return scalar diff = `diff'
    return local N = `N'
    return local n = `n'
    
end

My questions are:

[1] How can I return the results for all categories when I use the by option and not only for the last category?

[2] How can I display and return the results for the total of a category when I use the by option? i.e. return the same results as without the by option.

[3] How can I exclude the missing values from my estimations both when I use and not use the by option?

Thanks in advance
Nikos


      
___________________________________________________________ 
Χρησιμοποιείτε Yahoo!; 
Βαρεθήκατε τα ενοχλητικά μηνύματα (spam); Το Yahoo! Mail 
διαθέτει την καλύτερη δυνατή προστασία κατά των ενοχλητικών 
μηνυμάτων http://login.yahoo.com/config/mail?.intl=gr 


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

*
*   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   |   What's new   |   Site index