Publication quality regression tables with asdoc in Stata – video example

  • 50

Publication quality regression tables with asdoc in Stata – video example

Category:asdoc Tags : 

Creating publication-quality tables in Stata with asdoc is as simple as adding asdoc to Stata commands as a prefix. asdoc can create two types of regression tables. The first type (call it detailed) is the detailed table that combines key statistics from the Stata’s regression output with some additional statistics such as mean and standard deviation of the dependent variable etc. This table is the default option in asdoc. The second table is a compact table that nests more than one regressions in one table (call it nested).

In this video post, I show how to use asdoc to produce the following nested table. 




Nicole Martin

June 8, 2018at 10:33 pm

Firstly, thank you for making your Stata package available – it’s really speeding up my workflow compared to the other options available. I’m writing to make a suggestion that you consider adding an option that value labels can be reported in regression tables as well as variable labels.

Many thanks, and best wishes,


August 1, 2018at 1:36 am

Can ” asdoc” export the OR and 95% CI from logistic regression analysis?

    Attaullah Shah

    August 1, 2018at 2:03 am

    Dear Emily
    Version 2.0 of asdoc will have this option.


August 16, 2018at 7:00 pm

asdoc is an amazing service to the field. Appreciate it very much. Like Nicole, I would love a labels option for regression outputs. That function works great for asdoc sum, but would be of great value in this function too.

Thanks again.

Attaullah Shah

August 16, 2018at 9:37 pm

Dear Eric and Nicole, thanks for your suggestions. I am exploring the suggested possibilities. Since version 2 of asdoc is almost ready, I may come up with label option in version 3 or version 2.1.

Sher Khan

September 10, 2018at 11:39 am

Appreciate for your great work ,thank you for making your Stata package available – it’s really speeding up my workflow and saved time. Honestly , i learned a lot .
i asked one question Can asdoc command used for advance Dynamic Model ? e.g asdoc reg .. How to used for Dynamic Model to create tables ? Your response with this regard is highly appreciated

Attaullah Shah

September 10, 2018at 2:24 pm

Sher Khan, can you tell which specific Stata command are you referring to?


September 18, 2018at 5:26 am

I am excited to see this! However, I have a question. What would the code be if we want to put several models into the same table with different IVs but the same DV? So, say in the first model I want to include IV1, in the second model IV2, and so forth. But in model 6 I want to include IVs1-IVs5. What would this code look like if I’m nesting my model?

    Attaullah Shah

    September 18, 2018at 2:52 pm

    Dear Mike
    Let us say that our dependent variable is DV and our independent variables are named IV1, IV2, IV3, IV4, IV5, and IV6. You have asked that what if we run a separate regression on each independent variable and then include all independent variables in one model at the end. Then our codes would be

    asdoc reg DV IV1, replace nest cnames(IV1)
    asdoc reg DV IV2,  nest cnames(IV2)
    asdoc reg DV IV3,  nest cnames(IV3)
    asdoc reg DV IV4,  nest cnames(IV4)
    asdoc reg DV IV5,  nest cnames(IV5)
    asdoc reg DV IV6,  nest cnames(IV6)
    asdoc reg DV IV1-IV6, nest cnames(all) 


October 11, 2018at 1:56 pm

This is a wonderful tool! Thank you so much for making this available.

I see asdoc v2.0 allows ORs from ologit in the detailed table output. Is it possible to display ORs in the nested table output as well?

    Attaullah Shah

    October 11, 2018at 4:41 pm

    Justin: I missed the option eform when coding the nest option. Hopefully, I shall add it in the next update


October 12, 2018at 4:15 pm

That would so fantastic. Being able to use the reporting options, nested ORs and 95% CIs especially, to get tables directly to Word would save me hours of table-copying.

Attaullah Shah

October 12, 2018at 4:53 pm

Justin: You mean to report the 95% CIs instead of t-values or standard errors?


October 16, 2018at 5:35 pm


    Attaullah Shah

    October 16, 2018at 7:48 pm

    Justin: I have noted your suggestions and will consider them in future updates of the asdoc. Thanks.


October 27, 2018at 7:39 am

Thank You so much sir for sharing your knowledge I have one question, how can I replace t-value on se value in regression tables, I tried but it shows se value in. perenthesis in word tables.plz, guide me. best regards

    Attaullah Shah

    October 27, 2018at 10:43 am

    Ayub : I think you are referring to nested regression tables. If yes, then you can use the option rep(t), which will report t-values instead of standard errors. For example,

    sysuse auto
    asdoc reg price mpg rep78, rep(t) replace nest
    asdoc reg price mpg weight, rep(t) nest

Dr Zumin Shi

November 10, 2018at 12:08 am

I like your asdoc very much. In epidemiological research, we often focus on one independent variable (recoded into quartiles) and run multiple multivariable models (with different adjustment). The regression coefficients are often reported in one table (see below). Is it possible to do it using asdoc?





p for trend

Model 1


0.86 (0.52-1.42)

0.66 (0.40-1.11)

0.57 (0.33-0.98)


Model 2


0.85 (0.51-1.41)

0.64 (0.38-1.08)

0.58 (0.34-1.00)


Model 3


0.93 (0.54-1.61)

0.76 (0.42-1.37)

0.78 (0.43-1.43)


note: model 1 adjusted for age
model 2 further adjusted for education, and physical activity
model 3 further adjusted for hypertension.

p for trend was calculated using qartiles of fruit intake as an ordinal variable in logistic regression.
The table is based on six logistic regression models.

Bassem Hamandi

November 22, 2018at 10:24 pm

Thank you for developing this Stata package. I wonder if there is a way to export the 95% confidence interval reported after running stcox in Stata? My apologies if this is trivial but I could not find any details in the help file.
Thank you for any help you can provide.

    Attaullah Shah

    November 22, 2018at 11:29 pm

    Bassem Hamandi : Thanks for your query. Adding CI to regression tables with asdoc is on my agenda for the next update. Can you please indicate whether you want the CIs with detailed regression tables or nested tables using asdoc. You can see the help file, Section 4.1 and 4.2

Bassem Hamandi

November 22, 2018at 11:32 pm

Thank you. I am hoping to report using detailed regression tables.

Juan Miranda

November 30, 2018at 8:16 pm

Dear Attaullah Shah, good afternoon.

I’m a Stata user, but some programming things I do not understand yet.
I’ve been looking at forums like
answer to a question I have.

I am not able to make my loop save the results after regressing over files (betas, t, R2 and N), with all my datasets. I have 11 named 2005.dta to 2017.dta (except for 2009) contained in a folder (F:\datasets).

The objective is to use asdoc, and to generate a summary table of the estimates I make. The code that I have written is the following.

cd "F: \ datasets"
local i: dir. files "* .dta"
foreach file in `i '{
    asdoc reg and x1 x2 x3, append nest rep (t | se) title (Table 1 MCO per year) dec (3)

But the result is that asdoc saves the results of a single database (only the first – 2005) 11 times and does nothing for the others.

If you could have time to help me solve this problem I would thank you very much.

Cheers Juan

    Attaullah Shah

    November 30, 2018at 8:16 pm

    Juan Miranda: The question you have asked on stackoverflow is on hold, so I cannot add my answer there. The loop you are using does not use asdoc on each data set that you have. So the correct code would be:

    cd "F:\datasets"
    local i : dir "F:\datasets" files "*.dta"
    foreach file in `i' {
    use `file', clear
    asdoc reg y x1 x2 x3, append nest rep(t) title(Table 1 MCO per year) dec(3) save(reg)

    Please also note that there should be no space between rep and(t | se). The same applies to other options of asdoc.
    Also note: the option rep(t) is used to report t-statistics. Instead, if you want to report standard errors, you would use rep(se). However, you cannot use both rep(t|se). Perhaps, you copied this from the help file of asdoc, where the symbol pipe is used to denote that one of these can be used.

Dr. Naimat Ullah Khan

December 18, 2018at 2:11 pm

Salam Jee,

If I wish to generate a table with standard errors instead of p-values, what I have to do with asdoc command?

    Attaullah Shah

    December 18, 2018at 2:13 pm

    Dear Dr. Naimat: Which regression table do you want to generate? The nested one or the detailed one? I think you are referring to the nested tables.

    In the nested table, you can report either standard errors or t-values. For standard errors, you can use the option rep(se)

    and for t-values, you can use the option rep(t)

    for example

    sysuse auto, clear
    asdoc reg price mpg, replace nest rep(se)
    asdoc reg price mpg trunk, nest rep(se) 

Dr. Naimat Ullah Khan

December 19, 2018at 12:43 am

Dear Sir Jee
Every time I use asdoc, I pray for you my heart.

Preshit Ambade

January 5, 2019at 4:16 am

Hello Dr. Shah,
Wonderful work on asdoc. It has made life easy for many students like me. I am using Fairle decomposition in stata with ado. file for it. I found the asdoc command doesnot work with it. If you get time please check it and update it in the next version. Thank you.


    Attaullah Shah

    January 5, 2019at 7:04 am

    Preshit Ambade: Thanks for your comment and feedback. Can you please share an example data and the code that does not work with asdoc. I shall work on it.


January 11, 2019at 11:06 pm

Hello Dr. Shah,
H have few questions?
1. I am wondering if we can use order option in asdoc regresssion as

asdoc reg price mpg trunk, nest rep(t) dec(2) replace order (_cons trunk mpg)

. I want to use order option like estout.
2. Is there decimal alignment options?
Thank you for your help .

    Attaullah Shah

    January 12, 2019at 8:13 am

    Thanks for your suggestions. I have noted them and will consider them in the next update of asdoc.

    Attaullah Shah

    January 31, 2019at 11:55 am

    Turns out that we can use the keep option for ordering variables as well as keeping required variables. Let me present two examples in this blog post as this feature needs more attention.


January 12, 2019at 5:38 pm

Thanks. One more question.
How to report Pseudo R2 in asdoc regression results.

Krishanu Karmakar, PhD

January 24, 2019at 9:30 pm

Recently I came across your -asdoc- routine in Stata and was trying to use it for my Econometrics courses. I think I came across a bug in the routine. If you have time kindly have a look at it. The stata code is copied below.

Description of the problem: When creating tables with multiple equations, where one of the equations may have a logged dependent variable, it is quite difficult to use the eform option with asdoc – mostly the output is wrong. Probably you did intend to make “eform” an option for asdoc. It still takes the option but makes only the first equation of the set exponentiated. No matter which command I add the “eform” option to, it is always only the first equation that is exponentiated. code below.

System: Windows 10, asdoc version 2.2.0


version 14.2

sysuse auto, clear
gen lnmpg=ln(mpg)

*base models, no exponentiation tried
asdoc reg mpg turn, eform() save(file.doc) reset nest  replace
asdoc reg lnmpg turn, save(file.doc) nest  
asdoc reg lnmpg turn, save(file.doc) nest ///
            title(table1: base models, no exponentiation tried) 

*eform() in first command - nothing happens
asdoc reg mpg turn, eform() save(file.doc) reset nest
asdoc reg lnmpg turn, save(file.doc) nest  
asdoc reg lnmpg turn, save(file.doc) nest ///
            title(table2: eform in first command - nothing happens) 

*eform() all last command - first equation exponentiated
asdoc reg mpg turn, eform() save(file.doc) reset nest  
asdoc reg lnmpg turn, eform() save(file.doc) nest  
asdoc reg lnmpg turn, eform() save(file.doc) nest ///
            title(table3: eform in all commands - only first equation exponentiated) 

Anyway, notwithstanding this small bug, thank you for writing a quite useful routine.

    Attaullah Shah

    March 3, 2019at 8:12 am

    Dear Dr. Krishanu Karmakar
    Thanks for pointing this out. I have fixed these issues in version 2.3.3, dated Feb 23, 2019. You can install the new version from SSC

    ssc install asdoc, replace

Joanna Woersching

March 3, 2019at 7:47 am

Hi Dr. Shah,
Thank you very much for this wonderful program, will save me hours of table editing. I was hoping to create a nested table with odds ratio, se and confidence interval listed, are these options for asdoc nest? Thank you, Joanna Woersching

asdoc logistic stagedx3 eldepression elpsychosis elotherneurological eldrugabuse elalcoholabuse ///
ib2.casite2 i.sex2 i.agecat ib1.race2 elixscoret ib3.medincomecat ib2.insurance3 eltobacco, stats(se ci) ///
base cluster(facility), nest append dec(2)

    Attaullah Shah

    March 3, 2019at 8:18 am

    Joanna Woersching
    I replied to your query on the Statalist here
    If that is not what you are looking for, please provide some details on your desired output.

Krishanu Karmakar

March 3, 2019at 6:08 pm

Thank you for taking a look at it and spending your valuable time on this. This command is a wonderful addition to user written commands of Stata.


April 5, 2019at 8:35 pm

When I use logit with or option, it provides the coefficient instead of the odds ratio. I check the numbers, and those were coefficient, and not OR. IS there a way to display the odds ratio?

Richard Makurumidze

April 7, 2019at 3:53 am


It seems asdoc does not work with the chi (chi -square) and or (odds ratio) in logistic regression. Is this correct or am making some error?

    Attaullah Shah

    April 7, 2019at 10:04 am

    Since your pointed needed some detailed replies, I have replied to your querry in this blog post.


April 8, 2019at 7:45 pm

Hi there!

– Is there any way to export ONLY the coefficients in the nested regression output table? Without including standard errors OR t-values?
– Or if not, is there a way to export the table so that the standard errors / t-values are in the same table cell as the coefficients? And not in the cell below them?

Thank you so much for all that you do!!

    Attaullah Shah

    April 9, 2019at 12:02 am

    On your suggestion, I have added option notse to the nested regression. With this option, the output will omit standard errors or t-values. The updated version can be installed by typing the following in Stata command window:

    net install asdoc, from( replace
    help asdoc

    In-text citation
    Tables were created using asdoc, a Stata program written by Shah (2018).

    Shah, A. (2018). ASDOC: Stata module to create high-quality tables in MS Word from Stata output. Statistical Software Components S458466, Boston College Department of Economics.

Kabir Ahmed

April 20, 2019at 7:56 am

Is the asdoc for un-weighted estimates?
asdoc svy: table sex urb, col row sc format(%11.0f) //gives unweighted estimates
asdoc table sex urb, col row sc format(%11.0f) //gives unweighted estimates
table sex urb[pw=wgt_test], col row sc format(%11.0f) //gives weighted estimates
kindly clarify it.


June 18, 2019at 10:07 pm

Is it possible to get the same table as with nest function, with the wide format? Missing t values or standard deviation , with p values in the wide version.


    Attaullah Shah

    June 18, 2019at 11:13 pm

    I did not get your question. Are you asking for a wide regression table with no t-values or se?


June 19, 2019at 11:11 am

Dear professor,
margins are not working in my analysis. Is this command is not compatible with asdoc? or I am doing it wrong? Kindly advise

    Attaullah Shah

    June 19, 2019at 11:12 am

    Please provide an example of what is not working with asdoc. You can refer me to an example data set and the code that you are using with asdoc.


June 19, 2019at 11:15 am

apologies for bothering you, I found the correct command online it was helpful and issued resolved.

asdoc margins, dydx(rem_for_dummy), save(margins.doc) title(marginal effect)

Average marginal effects                        Number of obs     =      3,305
Model VCE    : Linearized

Expression   : Pr(lab_per_dum), predict()
dy/dx w.r.t. : rem_for_dummy

              |            Delta-method
              |      dy/dx   Std. Err.      z    P>|z|     [95% Conf. Interval]
rem_for_dummy |   .0253485   .0122308     2.07   0.038     .0013765    .0493205
(note: file margins.doc not found)
Click to Open File:  margins.doc

Thank you for your response.


June 19, 2019at 5:09 pm


Thanks for replying.

When you use the nested function, you get SD values in parentheses under the coefficients. You also get *** for p values. And you have the dependent variable in the columns.
With the wide function, where you have the dependent variables in the rows, you do not get the SD in parentheses under the coefficients. So, i would like in the wide option to have the same model output as with the nested function, only with the dependent variables in the rows, such as with the wide option. I would like the t values to be switched out with SD in the wide option also.

Hope this is a little more clear.

    Attaullah Shah

    June 19, 2019at 5:41 pm

    Seem you might benefit from reading the help file of asdoc. It has dozens of example on how to use the different options with the wide regression tables. What you are asking is already there. See the following example where I am reporting the SE under the regression coefficients and stars with coefficients for statistical significance.

    You can read asdoc help file by

    help asdoc

    . Specifically, read Section 4.3 of the help file and examples 26 to 35.

    Following are the examples of wide regressions with the mentioned options

    sysuse auto, clear
      asdoc reg price mpg rep78, wide replace se(below) stars
      asdoc reg turn mpg rep78, wide se(below) stars

Leave a Reply

8 − two =