Minh họa tạo bảng thống kê đơn giản sử dụng câu lệnh table
Kết hợp câu lệnh table với lệnh collect trên Stata 17
Ở bài trước, tôi đã giới thiệu cách sử dụng lệnh table
với một số tuỳ chọn cơ bản như nototals
,
totals()
, statistic()
, nformat()
, sformat
, và style()
.
Bài viết này tôi sẽ giới thiệu câu lệnh mới collect
để tạo các collection
, thiết lập bố cục, định dạng hiển thị và xuất các bảng ra các tài liệu. Tuỳ chọn style
được sử dụng ở câu lệnh table
trước đó để chỉ định kiểu hiển thị của bảng có thể được tạo/điều chỉnh thông qua câu lệnh collect
này.
Trở lại ví dụ trước đó bằng bảng thống kê cho các biến danh mục và liên tục với bộ dữ liệu NHANES-II1
. webuse nhanes2, clear
. table (sex) (highbp), /// > statistic(frequency) /// > statistic(percent) /// > statistic(mean age) /// > statistic(sd age) /// > nototals /// > nformat(%9.0fc frequency) /// > nformat(%6.2f mean sd) /// > sformat("%s%%" percent) /// > sformat("(%s)" sd) /// > style(default) ─────────────────────┬──────────────────── │ 0 1 ─────────────────────┼──────────────────── Male │ Frequency │ 2,611 2,304 Percent │ 25.22462% 22.25872% Mean │ 42.86 52.59 Standard deviation │ (16.97) (15.88) Female │ Frequency │ 3,364 2,072 Percent │ 32.49928% 20.01739% Mean │ 41.62 57.62 Standard deviation │ (16.60) (13.26) ─────────────────────┴────────────────────
Giới thiệu collection
, dimension
, và level
Để hiểu các khái niệm collection
, dimension
, và level
thì chúng ta hãy liên hệ tới các khái niệm tương ứng như datasets, variables và labels trong tập dữ liệu.
Sự tương đồng giữa các khái niệm
- một
collection
tương tự như một dataset - một
dimension
tương tự như một variable và cũng có các nhãn (labels) tương tự như biến. - một
level
tương tự như một factor của biến danh mục. Cáclevel
cũng có các giá trị nhãn,label
tương tự các giá trị nhãn của biến danh mục.
Việc sử dụng các collection
, dimension
, và level
có những điểm thuận lợi như không làm thay đổi dữ liệu gốc, phù hợp với yêu cầu tái lập trong nghiên cứu và linh hoạt sử dụng để đáp ứng các yêu cầu định dạng của công bố.
Câu lệnh table
sẽ tự động tạo một collection
cho chúng ta. Trong collection
này gồm có nhiều dimension
được liệt kê ở câu lệnh collect dims
. collect dims Collection dimensions Collection: Table ───────────────────────────────────────── Dimension No. levels ───────────────────────────────────────── Layout, style, header, label across 2 cmdset 1 colname 1 command 1 highbp 2 result 4 sex 2 statcmd 4 var 2 Style only border_block 4 cell_type 4 ─────────────────────────────────────────
Kết quả trên cho thấy, collection
vừa được tạo tự động ở câu lệnh table
trên có tên là Table. Trong collection
tên Table này có nhiều dimensions được thể hiện ở cột Dimmension như colname, command, result, highbp, sex, var…. Cột cuối cùng No. levels cho biết các mức/nhóm (level
) ở dimension
tương ứng. Chúng ta có thể xem giá trị level
cụ thể của mỗi dimension
qua câu lệnh collect levelsof
như bên dưới.
. collect levelsof sex Collection: Table Dimension: sex Levels: 1 2
Ở đây, dimension sex có hai giá trị 1 và 2. Chúng ta có thể xem các nhãn tương ứng với hai level 1 2 của dimension sex bằng cách sử dụng lệnh collect label list
như sau:
. collect label list sex, all Collection: Table Dimension: sex Label: Sex Level labels: .m Total 1 Male 2 Female
Kết quả cho chúng ta biết level 1 được gán nhãn là Male và level 2 có nhãn là Female. Tuỳ chọn all trong câu lệnh collect label list
bổ sung thêm một level có tên .m được gán nhãn là Total (cột giá trị tổng).
Chúng ta có thể thay đổi nhãn của các level, chẳng hạn gán nhãn Yes và No cho các level 1 và 0 của highbp như sau:
. collect levelsof highbp Collection: Table Dimension: highbp Levels: 0 1 . collect label list highbp, all Collection: Table Dimension: highbp Label: High blood pressure Level labels: .m Total 0 1 . collect label levels highbp 0 "No" 1 "Yes", modify . collect label list highbp, all Collection: Table Dimension: highbp Label: High blood pressure Level labels: .m Total 0 No 1 Yes . collect preview ─────────────────────┬──────────────────── │ No Yes ─────────────────────┼──────────────────── Male │ Frequency │ 2,611 2,304 Percent │ 25.22462% 22.25872% Mean │ 42.86 52.59 Standard deviation │ (16.97) (15.88) Female │ Frequency │ 3,364 2,072 Percent │ 32.49928% 20.01739% Mean │ 41.62 57.62 Standard deviation │ (16.60) (13.26) ─────────────────────┴────────────────────
Sử dụng lệnh collect preview
để xem trước kết quả bảng tổng hợp. Kết quả hiển thị ở bảng trên cho thấy dimension highbp có nhãn High blood pressure. Chúng ta cũng có thể đặt lại nhãn của dimension bằng lệnh collect label dim
.
. collect label dim highbp "Hypertension", modify . collect preview ─────────────────────┬──────────────────── │ No Yes ─────────────────────┼──────────────────── Male │ Frequency │ 2,611 2,304 Percent │ 25.22462% 22.25872% Mean │ 42.86 52.59 Standard deviation │ (16.97) (15.88) Female │ Frequency │ 3,364 2,072 Percent │ 32.49928% 20.01739% Mean │ 41.62 57.62 Standard deviation │ (16.60) (13.26) ─────────────────────┴────────────────────
Trở lại với kết quả của collect dims
của collection hiện tại, chúng ta thấy có một dimension đặc biệt tên là result. Chúng ta hãy thử xem các level trong result là gì qua câu lệnh collect label list result
. collect dims Collection dimensions Collection: Table ───────────────────────────────────────── Dimension No. levels ───────────────────────────────────────── Layout, style, header, label across 2 cmdset 1 colname 1 command 1 highbp 2 result 4 sex 2 statcmd 4 var 2 Style only border_block 4 cell_type 4 ───────────────────────────────────────── . collect label list result, all Collection: Table Dimension: result Label: Result Level labels: frequency Frequency mean Mean percent Percent sd Standard deviation
Ghi chú:
Dimension result được tạo ra bởi tuỳ chọn statistic()
trong câu lệnh table
. Kết quả cho thấy dimension này gồm các level tên frequency, mean, percent, và sd với các nhãn tương ứng là Frequency, Mean, Percent, và Standard deviation.
Chúng ta có thể sử dụng collect label levels
để thay đổi các nhãn của các level
trong dimension result như sau:
. collect label levels result frequency "Freq." /// > mean "Mean (Age)" /// > percent "Percent" /// > sd "SD (Age)" /// > , modify
Thiết lập hiển thị
Để định dạng hiển thị của bảng như đường kẻ đứng, các đường viền… thì có thể sử dụng câu lệnh collect style cell
để thiết lập. Ví dụ sau sẽ loại bỏ đường kẻ đứng ở cột đầu tiên.
. collect style cell border_block, border(right, pattern(nil)) . collect preview ──────────────────────────────── No Yes ──────────────────────────────── Male Freq. 2,611 2,304 Percent 25.22462% 22.25872% Mean (Age) 42.86 52.59 SD (Age) (16.97) (15.88) Female Freq. 3,364 2,072 Percent 32.49928% 20.01739% Mean (Age) 41.62 57.62 SD (Age) (16.60) (13.26) ────────────────────────────────
Bên cạnh collect style cell
, Stata 17 còn có nhiều câu lệnh hỗ trợ định dạng bảng như
collect style row
, collect style column
, và collect style header
. Chúng ta có thể sử
dụng những lệnh này để tinh chỉnh các đường viền, độ mờ, font chữ, màu và những thuộc tính khác của bảng.
Lưu lại kiểu định dạng
Chúng ta có thể tạo sẵn các kiểu định dạng hiển thị phù hợp cho các báo cáo theo yêu cầu của tổ chức hoặc các tạp chí.
- Sử dụng
collect style save
để lưu lại kiểu định dạng - Sử dụng
collect label save
để lưu lại các nhãn đã tinh chỉnh.
. collect label save MyLabels, replace (labels from Table saved to file MyLabels.stjson) . collect style save MyStyle, replace (style from Table saved to file MyStyle.stjson)
Khi style và label đã được lưu, chúng ta có thể sử dụng các tuỳ chọn style()
và label()
trong câu lệnh để sử dụng các mẫu thiết lập này.
. table (sex) (highbp), /// > statistic(frequency) /// > statistic(percent) /// > statistic(mean age) /// > statistic(sd age) /// > nototals /// > nformat(%9.0fc frequency) /// > sformat("%s%%" percent) /// > nformat(%6.2f mean sd) /// > sformat("(%s)" sd) /// > style(MyStyle, override) /// > label(MyLabels) ─────────────────────────────── No Yes ─────────────────────────────── Male Freq. 2,611 2,304 Percent 25.22% 22.26% Mean (Age) 42.86 52.59 SD (Age) (16.97) (15.88) Female Freq. 3,364 2,072 Percent 32.50% 20.02% Mean (Age) 41.62 57.62 SD (Age) (16.60) (13.26) ───────────────────────────────
Xuất các bảng ra các tài liệu
Chúng ta có thể sử dụng câu lệnh collect export
để xuất các bảng tổng hợp của chúng ta ra nhiều định dạng khác nhau như Word, Excel, HTML 5, Markdown, PDF hay LaTex.
. collect style putdocx, layout(autofitcontents) /// > title("Table 1: Descriptive Statistics by Hypertension Status") . collect export MyTable1.docx, as(docx) replace (collection Table exported to file MyTable1.docx)
Ở đây, đầu tiên tôi sử dụng collect style putdocx
để thêm tiêu đề vào bảng và tự động canh lề bảng trong Word. Tiếp đến, câu lệnh collect export
sẽ xuất bảng tổng hợp này sang Word.
Câu lệnh putdocx
là một công cụ rất tuyệt với để tạo ra các báo cáo tự động trên Word (và cả PDF). Nó cho phép chèn các sơ đồ/bảng biểu, các phương trình toán học và quan trọng hơn là các kết quả được tổng hợp trên Stata (từ câu lệnh table
và collect
chẳng hạn). Lệnh putdocx
gần như hỗ trợ hầu hết các công cụ định dạng quan trọng trên Word như tiêu đề, đề mục, canh lề, cũng như nối các file Word được định dạng sẵn lại với nhau.
Tổng kết
- Style sẽ quyết định dạng hiển thị của bảng. Stata có các style được thiết kế sẵn 2. Chúng ta có thể tạo và lưu lại các Style phù hợp cho các yêu cầu báo cáo cụ thể,
collect style save
. Một số câu lệnh nhưcollect style cell
,collect style row
,collect style column
, vàcollect style header
sẽ hỗ trợ việc tạo style cụ thể từ các style sẵn có. collection
là một style cụ thể, có ý nghĩa tương tự datasets.- Mỗi
collection
sẽ có cácdimension
(có ý nghĩa tương tự variables) cho biết các khía cạnh (thuộc tính) củacollection
. Sử dụngcollect dims
để liệt kê cácdimension
củacollection
hiện tại. Sử dụng lệnhcollect label dim
để đặt lại tên nhãn chodimension
. - Mỗi
dimension
sẽ có các mức giá trị,level
khác nhau. Mỗilevel
sẽ có một nhãn mô tả tương ứng (giống nhãn và giá trị nhãn trong các biến danh mục).- Sử dụng
collect levelof
để xem cụ thể cáclevel
của mộtdimension
, - Sử dụng
collect label list
để liệt kê các nhãn củadimension
, hay - Sử dụng
collect label levels
để đổi tên các nhãn củalevel
- Sử dụng
- Sử dụng
collect preview
để xem trước dạng hiển thị của bảng. - Sử dụng
collect export
để xuất bảng tổng hợp này sang Word
Bài viết được tổng hợp từ The Stata Blog 3
- McDowell A, Engel A, Massey JT, Maurer K. Plan and operation of the Second National Health and Nutrition Examination Survey, 1976-1980. Vital Health Stat 1. 1981;(15):1-144. PMID: 7344293.↩︎
- Predefined Style tại https://www.stata.com/manuals/tablespredefinedstyles.pdf↩︎
- Customizable tables in Stata 17, part 2: The new collect command tại:
https://blog.stata.com/2021/06/07/customizable-tables-in-stata-17-part-2-the-new-collect-command/↩︎