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
Nội dung chính
Để 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
collectiontương tự như một dataset - một
dimensiontương tự như một variable và cũng có các nhãn (labels) tương tự như biến. - một
leveltương tự như một factor của biến danh mục. Cáclevelcũng có các giá trị nhãn,labeltươ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 headersẽ hỗ trợ việc tạo style cụ thể từ các style sẵn có. collectionlà một style cụ thể, có ý nghĩa tương tự datasets.- Mỗi
collectionsẽ 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ácdimensioncủacollectionhiện tại. Sử dụng lệnhcollect label dimđể đặt lại tên nhãn chodimension. - Mỗi
dimensionsẽ có các mức giá trị,levelkhác nhau. Mỗilevelsẽ 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áclevelcủ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/↩︎