<>
Apparently, you don't need to create the macro "ci2", just replace "ci" with a rounded version of its self to shorten the code I gave earlier, so:
***************
clear
sysuse auto
* --------------------------
cap program drop test22
program define test22
syntax [, ci(real 95)]
di "before rounding: " "`ci'"
local ci : display round(`ci', .01)
di "after rounding: " "`ci'"
set level `ci'
end
* --------------------------
* --------------------------
test22, ci(99.9)
* --------------------------
***************
~ Eric
__
Eric A. Booth
Public Policy Research Institute
Texas A&M University
[email protected]
Office: +979.845.6754
On Dec 31, 2009, at 7:55 PM, Eric Booth wrote:
> <>
>
> Dirk:
>
> A couple of issues here.
> #1 Realize that there is already a program -test- in Stata, so you need to either change the name or -drop program- test before running your code.
> #2 When you ask Stata to capture the real number in ci(99.9), it captures the real number "99.90000000000001", not "99.9", which is what the -set level- command doesn't like, so it give you the error. See the results of running your program with -set trace on- below:
>
>
> ----------------------------------------------------------------------- begin test ---
> - syntax [, ci(real 95)]
> - set level `ci'
> = set level 99.90000000000001
> level() can have at most two digits after the decimal point
> ------------------------------------------------------------------------- end test ---
>
> So, you need to round `ci' before passing it to the -set level- command. I'm not a Stata programmer, so I don't know if there are better ways of doing this in a program, but here's one way that worked for me (NOTE: I changed your program to "test22" to avoid issues I mentioned in #1 above):
>
> ***************
> clear
> sysuse auto
>
> * --------------------------
> cap program drop test22
> program define test22
> syntax [, ci(real 95)]
> di "before rounding: " "`ci'"
> local ci2 : display round(`ci', .01)
> local ci = "`ci2'"
> di "after rounding: " "`ci'"
> set level `ci'
> end
> * --------------------------
> * --------------------------
> test22, ci(99.99)
> * --------------------------
> ***************
>
>
> #3 Finally, the -syntax- help file indicates that there is already a pre-built option in there for grabbing the confidence level. There might be other reasons that you want to capture it in the `ci' macro, but if not, you might try substituting in the -ci(cilevel)- option:
>
>
> ****************
> clear
> sysuse auto
> * --------------------------
> cap program drop test22
> program define test22
> syntax [, ci(cilevel)]
> set level `ci'
> di "`ci'"
>
> end
> * --------------------------
>
> * --------------------------
>
> test22, ci(99.9)
> * --------------------------
> ******************
>
> ~ Eric
> __
> Eric A. Booth
> Public Policy Research Institute
> Texas A&M University
> [email protected]
> Office: +979.845.6754
>
>
>
>
>
> On Dec 31, 2009, at 6:46 PM, Dirk Enzmann wrote:
>
>> Why does the following program not work as intended?
>>
>> * --------------------------
>> program define test
>> syntax [, ci(real 95)]
>> set level `ci'
>> end
>> * --------------------------
>>
>> It is an example of a program that allows the optional argument "ci" to specify the confidence level (the default should be 95). It works as intended as long as I don't specify "ci" with digits after the decimal point. But if I do, for example
>>
>> * --------------------------
>> test, ci(99.9)
>> * --------------------------
>>
>> I receive the error message "level() can have at most two digits after the decimal point". What am I doing wrong, i.e. how can I avoid this problem?
>>
>> ***************************
>> Dirk Enzmann
>> [email protected]
>> *
*
* 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/