Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: st: issues using the user-written program tabout
From
Jordan H <[email protected]>
To
[email protected]
Subject
Re: st: issues using the user-written program tabout
Date
Fri, 8 Oct 2010 13:45:31 -0400
Thank you, Eric! Truncation was the issue.
Jordan
---
Jordan Hoolachan
Department of Biostatistics
Johns Hopkins Bloomberg School of Public Health
410-294-3670
On Fri, Oct 8, 2010 at 10:29 AM, Eric Booth <[email protected]> wrote:
> <>
>
>
> My guess is that the variable list in -tabout- is limited to the string char limit of 244 characters, though I can't tell where this occurs from the source of tabout.ado.
>
> I've tested it with increasingly longer varlists (in terms of characters, not variables) and -tabout- always breaks when I hit the 244 barrier (sample code below) -- so, I've always just assumed the macro varlist in -tabout- is, at some point, converted to a string (and therefore truncated) as it's passed through the program.
>
> My solution has always been to just break it up into numerous -tabout- commands and append them together. So, you could change your second command to:
>
> ************
> tabout side_indicator-MidpointVariableHere paid_total_cat using tabletest.txt, ///
> ... <all your options> .... ///
> npos(tufte) replace
>
> tabout NextVariableAfterMidpoint-skin_indicator paid_total_cat using tabletest.txt, ///
> ... <all your options> ... ///
> npos(tufte) append
> ************
>
> and this will stack the tables together in one file (though it will add a new header row).
> If you want to avoid the new header row, you could also shorten (-rename-) your variable names to stay under the 244 character limit.
>
> Test the length of your varlist with:
> **********
> unab varlist: side_indicator-skin_indicator
> di "`varlist'"
> local length:length local varlist
> di "`length'"
> *********
>
>
>
>
> Finally, here's some code (mentioned above) to show an example of -tabout- breaking once your pass the 244 char barrier:
>
> ************************!
> sysuse auto, clear
>
> unab varlist: mpg-for
> di "`varlist'"
> local length:length local varlist
> di "`length'"
>
> qui {
> tabout `varlist' using "tabletest.txt", ///
> sum c(mean for) ///
> npos(tufte) replace
> }
>
>
> **longer varlists**
> forval n = 1/16 {
> g newvariable`n' = 1
>
> unab varlist: mpg-newvariable`n'
> di in yellow "`varlist'"
> local length:length local varlist
> di in red "Length: `length'"
>
> qui {
> tabout `varlist' using "tabletest.txt", ///
> sum c(mean for) ///
> npos(tufte) append
> }
> }
> ************************!
>
> - Eric
> __
> Eric A. Booth
> Public Policy Research Institute
> Texas A&M University
> [email protected]
> Office: +979.845.6754
>
>
> On Oct 7, 2010, at 5:10 PM, Jordan H wrote:
>
>> Dear all,
>>
>> I am trying to create a two way table with the levels of binary
>> outcome variable (paid_total_cat) as the columns and the levels of
>> numerous of predictor variables as the rows. I have used the
>> following command to produce such a table for the predictor variables
>> "thigh_upperleg_indicator" through "rib_indicator."
>>
>> tabout thigh_upperleg_indicator-rib_indicator paid_total_cat using
>> tabletest.txt, ///
>> sum c(mean paid_total_adjusted sd paid_total_adjusted min
>> paid_total_adjusted p25 paid_total_adjusted p50 paid_total_adjusted
>> p75 paid_total_adjusted max paid_total_adjusted) ///
>> style(tex) font(bold) h3(nil) body f(2cm 2cm 2cm 2cm 2cm 2cm 2cm)
>> npos(tufte) replace
>>
>> The above command works perfectly and gives me what I want. I also
>> want to make an identical table using a different list of variables so
>> I use the following command:
>>
>> tabout side_indicator-skin_indicator paid_total_cat using tabletest.txt, ///
>> sum c(mean paid_total_adjusted sd paid_total_adjusted min
>> paid_total_adjusted p25 paid_total_adjusted p50 paid_total_adjusted
>> p75 paid_total_adjusted max paid_total_adjusted) ///
>> style(tex) font(bold) h3(nil) body f(2cm 2cm 2cm 2cm 2cm 2cm 2cm)
>> npos(tufte) replace
>>
>> The two commands are identical (aside from the predictor variables
>> that are included in the list) but the second command gives me the
>> error message: "paid_total_ ambiguous abbreviation
>> r(111);"
>>
>> Since the predictor variables are what changes between the two
>> commands, I'm assuming the new variables must be causing the issue.
>> That being said, I've even gone so far as to manually write out all
>> the variables that are referenced by the statement
>> "side_indicator-skin_indicator" but that doesn't fix the problem. I
>> have also used "set trace on" to try to pinpoint the issue but the
>> programming used within tabout is far too complicated for my skill
>> level. Here is the snippet of the trace output where the error
>> occurs...perhaps you have a better grasp of what is going on within
>> the program.
>>
>> ------------------------------------------------------------------------------------------------
>> end tabout.sum_write ---
>> - }
>> - }
>> - else if $do_svy==1 {
>> = else if 0==1 {
>> if $oneway==1 local hvar = "_xx_ph_xx_"
>> if ($do_sum==0) svy_mat `v' `hvar' `svycat' `svylevel' `svyporp' `touse'
>> else svy_sum `svy_sumvar' `v' `hvar' `svylevel' `colmat' `touse'
>> do_write `v' `hvar' "`format'"
>> }
>> - global fpass = 0
>> - }
>> - local vvarname : variable label `v'
>> = local vvarname : variable label paid_total_
>> paid_total_ ambiguous abbreviation
>> <------------------- here is the error
>> if ("`vvarname'"=="") label var `v' "`v'"
>> local vtype : type `v'
>> if (substr("`vtype'",1,3)=="str") {
>> capture encode `v', gen(_`v'_x)
>> local v = "_`v'_x"
>> global dropv = "$dropv `v'"
>> }
>> if ("`v'"=="`lastvar'") global lpass = 1
>> if $do_svy==0 {
>> if $oneway==1 local hvar = "_xx_ph_xx_"
>> if ($do_sum==0) {
>> do_mat `v' `hvar' `weightstr1' `weightstr2' `colmat' `touse'
>> do_write `v' `hvar' "`format'"
>> }
>> else {
>> if ($oneway==0) sum_twoway `v' `hvar' `weightstr1' `weightstr2'
>> `colmat' `statkind' `statvar' `touse'
>> else sum_oneway "`cells'" `v' `weightstr1' `weightstr2' `touse'
>> sum_write `v' `hvar' "`format'" "`cells'"
>> }
>> }
>> else if $do_svy==1 {
>> if $oneway==1 local hvar = "_xx_ph_xx_"
>> if ($do_sum==0) svy_mat `v' `hvar' `svycat' `svylevel' `svyporp' `touse'
>> else svy_sum `svy_sumvar' `v' `hvar' `svylevel' `colmat' `touse'
>> do_write `v' `hvar' "`format'"
>> }
>> global fpass = 0
>> }
>> ------------------------------------------------------------------------------------------------------------
>> end tabout ---
>> r(111);
>>
>>
>>
>> Does anyone have any insight into this issue?
>>
>> Thanks for the consideration,
>> Jordan
>>
>> *
>> * 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/
>
*
* 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/