Xử lý dữ liệu

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, variableslabels 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ác level 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ị 12. 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 YesNo cho các level 10 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()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 tablecollect 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ác dimension (có ý nghĩa tương tự variables) cho biết các khía cạnh (thuộc tính) của collection. Sử dụng collect dims để liệt kê các dimension của collection hiện tại. Sử dụng lệnh collect label dim để đặt lại tên nhãn cho dimension.
  • Mỗi dimension sẽ có các mức giá trị, level khác nhau. Mỗi level 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ác level của một dimension,
    • Sử dụng collect label list để liệt kê các nhãn của dimension, hay
    • Sử dụng collect label levels để đổi tên các nhãn của level
  • 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


  1. 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.↩︎
  2. Predefined Style tại https://www.stata.com/manuals/tablespredefinedstyles.pdf↩︎
  3. 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/↩︎

 

Source
Huber (2021)
Back to top button