could you please help with a conundrum I have not been able to resolve myself.
The code below creates a properly formatted docx table of summary stats of the auto data.
My problem is that when I try to force the formatting of certain variables to %12.0fc it works for some rows but not others. It seems to be related to the numbers taking up relatively more spaces but I thought that 12 should be enough. I experimented with other total numbers of spaces: 9,10 but it does not help.
I have put !!! in the comments before the lines of code not working as expected.
Code:
version 16 set more off sysuse auto, clear * create a new var called model to add a nested structure to the data gen model = substr(make,1,strpos(make," ")-1) * Subaru is the only one with a single word replace model = make if make == "Subaru" * remove full stops replace model = subinstr(model,".","",.) la var model "Model" * collect all num vars in a macro ds, has(type numeric) local vars r(varlist) * save number of obs in a macro to report in a single line at the bottom of the summary stats table qui count local obs = r(N) * save number of models in a macro as well qui levelsof model, l(models) clean local count_models: word count `models' * start docx file putdocx begin qui tabstat `vars', stats(mean sd min p50 max) save mat out = r(StatTotal)' local rows = rowsof(out) local cols = colsof(out) * fill an auxilliary matrix with the two counts to add at the bottom matrix add = J(2,5,.) matrix add[1,1] = `count_models' matrix add[2,1] = `obs' mat out = out \ add *matlist out * add table to file putdocx table tbl = matrix(out), rownames colnames nformat(%12.3fc) putdocx table tbl(.,.), font("Times New Roman") border(all, nil) halign(center) * name columns putdocx table tbl(1,1) = ("Variable names"), font("Times New Roman") halign(center) putdocx table tbl(1,2) = ("Mean"), font("Times New Roman") halign(center) putdocx table tbl(1,3) = ("Std. Dev."), font("Times New Roman") halign(center) putdocx table tbl(1,5) = ("Median"), font("Times New Roman") halign(center) * name rows with var labels local c = 2 foreach v of local vars { local lab: var lab `v' putdocx table tbl(`c',1)= ("`lab'"), font("Times New Roman") local ++c } * adjust formatting of certain variables and columns as needed * !!! price is not working putdocx table tbl(2,.), nformat(%12.0fc) * !!! this one works for all other vars except weight forv i = 4/6 { putdocx table tbl(.,`i'), nformat(%9.0fc) } * add the model and make labels local c = `rows' + 2 putdocx table tbl(`c',1) = ("Models"), font("Times New Roman") putdocx table tbl(`c',.), nformat(%6.0fc) * replace the missing dots with blanks on that row forv i = 3/6 { putdocx table tbl(`c',`i') = ("") } * go to next row local ++c putdocx table tbl(`c',1)= ("Makes"), font("Times New Roman") putdocx table tbl(`c',.), nformat(%6.0fc) forv i = 3/6 { putdocx table tbl(`c',`i') = ("") } * add borders putdocx table tbl(1,.), border(top, thick) border(bottom, single) border(start, nil) border(end, nil) local last = rowsof(out) + 1 putdocx table tbl(`last',.), border(bottom, thick) border(start, nil) border(end, nil) * close and save putdocx save sysauto_summ_stats, replace
Code:
putdocx table tbl = matrix(out), rownames colnames
Code:
* adjust format of remaining lines in cols 2 and 3 local last = `rows' + 1 forv c = 3/`last' { putdocx table tbl(`c',2), nformat(%9.3fc) putdocx table tbl(`c',3), nformat(%9.3fc) }
Thank you!
0 Response to getting putdocx to change the display format to %12.0fc
Post a Comment