messenger_logo
Liên hệ qua Messenger
SciEco

Bảng biểu tuỳ chỉnh trong stata 17: quản lý và thiết kế chuyên nghiệp với lệnh collect

I
IEFPA
Ngày viết: 22/07/2026

Khi trình bày kết quả nghiên cứu, việc tạo ra các bảng biểu trực quan và đúng chuẩn xuất bản là tiêu chí vô cùng quan trọng. Trong các phiên bản Stata trước đây, việc định dạng bảng thường đòi hỏi nhiều thao tác thủ công hoặc chỉnh sửa lại trên các phần mềm xử lý văn bản. Stata 17 đã giải quyết triệt để thách thức này bằng hệ thống lệnh collect, cho phép người dùng tùy biến toàn bộ cấu trúc, nhãn hiển thị, đường viền và xuất bảng trực tiếp sang các định dạng tài liệu phổ biến.

Khởi đầu với bảng thống kê cơ bản

Để hiểu rõ cơ chế hoạt động của collect, hãy bắt đầu bằng việc tạo một bảng thống kê mô tả cơ bản kết hợp giữa hai biến số giới tính và huyết áp cao. Lệnh table dưới đây thu thập các thông số bao gồm tần suất, tỷ lệ phần trăm, giá trị trung bình và độ lệch chuẩn của tuổi tác.

1table (sex) (highbp), ///
2      statistic(frequency) ///
3      statistic(percent) ///
4      statistic(mean age) ///
5      statistic(sd age) ///
6      nototals ///
7      nformat(%9.0fc frequency) ///
8      sformat("%s%%" percent) ///
9      nformat(%6.2f mean sd) ///
10      sformat("(%s)" sd)

Kết quả hiển thị mặc định của Stata sẽ có dạng như sau:

-----------------------------------------------

| High blood pressure

| 0 1

-----------------------+-----------------------

Sex |

Male |

Frequency | 2,611 2,304

Percent | 25.22% 22.26%

Mean | 42.86 52.59

Standard deviation | (16.97) (15.88)

Female |

Frequency | 3,364 2,072

Percent | 32.50% 20.02%

Mean | 41.62 57.62

Standard deviation | (16.60) (13.26)

-----------------------------------------------

Bảng dữ liệu trên đã đầy đủ thông số nhưng giao diện vẫn chưa đạt chuẩn trình bày báo cáo. Giá trị của biến huyết áp cao mới chỉ hiển thị dạng mã số 0 và 1 thay vì nhãn có nghĩa.

Khái niệm cốt lõi: Collection, dimension và level

Mỗi khi lệnh table chạy, Stata sẽ tự động khởi tạo một đối tượng lưu trữ gọi là collection. Để làm chủ hệ thống này, cần nắm vững ba khái niệm tương đương giữa tập dữ liệu và bộ thu thập kết quả:

Collection tương tự như một tập dữ liệu hoàn chỉnh.

Dimension đóng vai trò như một biến số trong tập dữ liệu đó.

Level tương ứng với các giá trị hoặc phân loại của biến số.

Chúng ta kiểm tra các dimension có trong collection hiện tại bằng lệnh collect dims:

1collect dims

Kết quả đầu ra xác nhận collection có tên là Table, chứa các dimension do người dùng khai báo từ biến số như sex, highbp, cũng như các dimension hệ thống tạo ra như result hay border_block.

Để kiểm tra các level trong dimension sex và nhãn đi kèm, có thể sử dụng chuỗi lệnh kiểm tra:

1collect levelsof sex
2collect label list sex, all

Tương tự, khi kiểm tra dimension highbp, các level 0 và 1 chưa hề có nhãn hiển thị. Thay vì sửa trực tiếp vào nhãn giá trị của tập dữ liệu gốc, chúng ta gán nhãn trực tiếp cho collection:

1collect label levels highbp 0 "No" 1 "Yes"
2collect label dim highbp "Hypertension", modify
3collect preview

Lệnh collect preview cho phép xem trước kết quả bảng sau khi cập nhật:

-------------------------------------------

| Hypertension

| No Yes

-----------------------+-------------------

Sex |

Male |

Frequency | 2,611 2,304

Percent | 25.22% 22.26%

Mean | 42.86 52.59

Standard deviation | (16.97) (15.88)

Female |

Freq. | 3,364 2,072

Percent | 32.50% 20.02%

Mean | 41.62 57.62

Standard deviation | (16.60) (13.26)

-------------------------------------------

Thay đổi nhãn cho các chỉ số thống kê

Điểm vượt trội của lệnh collect nằm ở khả năng tùy biến cả các thành phần không phải là biến số. Dimension có tên result lưu trữ các tên chỉ số thống kê như tần suất, giá trị trung bình hay độ lệch chuẩn.

Chúng ta kiểm tra các level của result bằng lệnh collect label list result, sau đó tiến hành rút gọn các tiêu đề hiển thị cho gọn gàng hơn:

1collect label list result, all
2collect label levels result frequency "Freq." ///
3                            mean      "Mean (Age)" ///
4                            percent   "Percent" ///
5                            sd        "SD (Age)" ///
6                            , modify
7collect preview

Bảng hiển thị lúc này đã tinh gọn hơn rất nhiều nhờ việc thay đổi nhãn của dimension result mà hoàn toàn không ảnh hưởng đến cấu trúc tính toán ban đầu.

Tinh chỉnh giao diện và đường viền bảng

Giao diện bảng mặc định thường chứa các đường gạch đứng phân cách giữa các cột. Trong nhiều chuẩn trình bày bài báo khoa học, đường phân cách đứng thường bị loại bỏ.

Sử dụng nhóm lệnh collect style để can thiệp vào từng ô, dòng hoặc cột của bảng. Lệnh dưới đây giúp ẩn đường viền đứng bên phải của cột đầu tiên:

1collect style cell border_block, border(right, pattern(nil))
2collect preview

Bảng kết quả sau khi loại bỏ đường viền dọc:

---------------------------------

Hypertension

No Yes

---------------------------------

Sex

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)

---------------------------------

Lưu trữ và tái sử dụng bộ thiết lập

Một ưu điểm lớn của Stata 17 là khả năng đóng gói các tùy chỉnh về nhãn và kiểu dáng thành tệp riêng biệt để tái sử dụng cho các phân tích sau này mà không cần viết lại mã lệnh từ đầu.

1collect label save MyLabels, replace
2collect style save MyStyle, replace

Khi tạo một bảng mới, chỉ cần gọi lại bộ nhãn và phong cách thiết kế đã lưu thông qua tùy chọn style() và label():

1table (sex) (highbp), ///
2      statistic(frequency) ///
3      statistic(percent) ///
4      statistic(mean age) ///
5      statistic(sd age) ///
6      nototals ///
7      nformat(%9.0fc frequency) ///
8      sformat("%s%%" percent) ///
9      nformat(%6.2f mean sd) ///
10      sformat("(%s)" sd) ///
11      style(MyStyle, override) ///
12      label(MyLabels)

Xuất báo cáo tự động sang Microsoft Word

Sau khi hoàn thiện định dạng, bảng biểu có thể xuất sang nhiều định dạng như Microsoft Word, Excel, PDF, HTML hoặc Markdown.

Đoạn mã sau đây minh họa việc đặt tiêu đề, thiết lập tự động điều chỉnh độ rộng cột và xuất thẳng bảng vào tệp văn bản Word:

1collect style putdocx, layout(autofitcontents) ///
2        title("Table 1: Descriptive Statistics by Hypertension Status")
3collect export MyTable1.docx, as(docx) replace

Ngoài ra, nếu bạn đang xây dựng một báo cáo hoàn chỉnh gồm nhiều đoạn văn bản và biểu đồ bằng lệnh putdocx, bạn hoàn toàn có thể chèn bảng vừa tạo vào vị trí mong muốn một cách linh hoạt:

1putdocx begin
2putdocx paragraph, style(Title)
3putdocx text ("Hypertension in the United States")
4putdocx paragraph, style(Heading1)
5putdocx text ("The National Health and Nutrition Examination Survey (NHANES)")
6putdocx paragraph
7putdocx text ("Hypertension is a major cause of morbidity and mortality in the United States. This report will explore the predictors of hypertension using the NHANES dataset.")
8collect style putdocx, layout(autofitcontents) ///
9        title("Table 1: Descriptive Statistics by Hypertension Status")
10putdocx collect
11putdocx save MyTable2.docx, replace

✨ Giá trị đắt giá

Việc tách biệt giữa dữ liệu gốc và lớp hiển thị báo cáo thông qua hệ thống lệnh collect mang lại sự linh hoạt tuyệt đối. Người nghiên cứu có thể tùy biến toàn bộ tiêu đề, nhãn số liệu và đường viền của bảng mà không lo lắng về việc làm thay đổi hay làm sai lệch nhãn biến trong tập dữ liệu gốc. Đồng thời, khả năng lưu tệp kiểu dáng giúp chuẩn hóa toàn bộ các bảng biểu trong dự án theo đúng quy chuẩn xuất bản chỉ với một dòng lệnh.

Bài tập ứng dụng

Hãy mở tập dữ liệu nghiên cứu hiện tại của bạn trong Stata 17 và thực hiện các yêu cầu sau:

1. Sử dụng lệnh table để tạo bảng kết hợp hai biến phân loại, tính trung bình và độ lệch chuẩn của một biến định lượng.

2. Đổi tên nhãn của các chỉ số trung bình và độ lệch chuẩn trong dimension result thành chữ viết tắt tiếng Việt.

3. Loại bỏ toàn bộ đường viền dọc, lưu bộ phong cách này dưới tên gọi Bảng_Chuan và xuất kết quả ra tệp Word.


Bài viết khác
Trong hành trình phát triển các lệnh ước lượng chuyên sâu trong Stata, việc tích hợp mã nguồn từ ngôn ngữ khác như C, C++ hay Java mở ra một thế giới mới về hiệu suất và khả năng tùy biến. Một trong những kỹ thuật mạnh mẽ nhất là viết plugin — hay còn gọi là thư viện liên kết động (DLL) — để tận dụng sức mạnh của C trong môi trường Stata. Bài viết này là phần thứ hai trong chuỗi chuyên đề “Viết một lệnh ước lượng trong Stata”, tiếp nối bài trước về việc chuẩn bị viết plugin. Ở đây, chúng ta sẽ xây dựng một plugin C thực hiện chính xác các phép tính mà hàm mymean_work() trong tệp mymean11.ado đã làm. Mục tiêu không chỉ là minh họa cách giao tiếp giữa C và Stata, mà còn cung cấp một nền tảng vững chắc cho các tính toán hiệu suất cao trong các mô hình kinh tế lượng phức tạp. Viết một plugin C đơn giản: “Hello, C!” Trước khi tiến vào tính toán thực tế, hãy bắt đầu bằng một ví dụ đơn giản: một plugin C hiển thị thông điệp “Hello from C” trong cửa sổ Stata. Mã nguồn cho myhello.ado được trình bày như sau:
Trong bài viết trước, chúng ta đã xây dựng một đường ống phân tích văn bản sử dụng quanteda. Quy trình đó tạo ra ma trận đặc trưng văn bản (DFM), áp dụng trọng số TF-IDF và đo lường sự tương đồng qua cosine similarity. Tuy nhiên, phương pháp này bộc lộ một hạn chế căn bản: cosine similarity tính trên các vector TF-IDF thưa chỉ phản ánh sự trùng lặp từ vựng, chứ không nắm bắt được ý nghĩa ngữ nghĩa. Xét ví dụ hai câu: "Người vay nợ không thực hiện nghĩa vụ trả nợ" và "Khách hàng không đáp ứng được cam kết trả nợ". Sau khi loại từ dừng, chúng không chia sẻ từ vựng nào, dẫn đến độ tương đồng TF-IDF gần như bằng 0. Dù vậy, bất kỳ аналитик nào cũng nhận ra chúng mang ý nghĩa như nhau. Giải pháp nằm ở vector nhúng dày đặc (dense embeddings) — biểu diễn thần kinh nơi các văn bản mang ý nghĩa gần nhau được ánh xạ đến các vị trí lân cận trong không gian vectơ. Nhờ đó, chúng ta có thể đo lường sự tương đồng ngữ nghĩa ngay cả khi không có từ chung. Bài viết này sẽ hướng dẫn xây dựng một đường ống Tạo sinh tăng cường truy xuất (RAG) trong R, sử dụng ragnar cho kho truy xuất và ellmer cho tương tác mô hình ngôn ngữ lớn (LLM), minh họa sức mạnh của nhúng dày đặc trong truy xuất và sinh câu trả lời. Toàn bộ quy trình chạy cục bộ nhờ Ollama.
SciEco
Science for Economics
Định hướng đào tạo phân tích dữ liệu, xây dựng chính sách, tối ưu hoá danh mục tài chính cá nhân và dự báo thị trường.
Liên hệ
Địa chỉ: Số 60, ngõ 41, Phố Thái Hà, Trung Liệt, Đống Đa, Hà Nội (Google Map)
Email: [email protected]
Hotline: 03.57.94.7680 (Mrs. Hà)
Mạng xã hội