Xử lý thống kê với Stata: workflow bằng do-file có thể tái lập
Một phân tích Stata đáng tin phải chạy lại được từ dữ liệu đầu vào đến bảng kết quả mà không cần sửa tay trong Data Editor hoặc sao chép số liệu thủ công.
Giữ dữ liệu raw bất biến, dùng một master do-file gọi tuần tự các bước import, clean, derive, analyze và report, kiểm tra khóa trước khi merge, ghi version, seed, packages và lưu log cho mỗi lần chạy.
Một quy trình phân tích có thể tái lập
- Codebook
Tên biến, mã hóa và missing
- Xử lý
Lưu các bước làm sạch dữ liệu
- Phân tích
Giữ cấu hình và mã lệnh
- Hồ sơ
Lưu kết quả và phiên bản
Sơ đồ khái niệm. Giữ dữ liệu gốc và dấu vết thay đổi để có thể kiểm tra lại.
Nguồn: Lê Minh biên soạn · Minh họa khái niệm, không phải đầu ra phần mềm.1. Workflow tái lập khác với một do-file dài như thế nào?
Do-file là điều kiện cần, nhưng một tệp lệnh dài chưa bảo đảm khả năng tái lập. Workflow còn bao gồm cấu trúc thư mục, nguồn dữ liệu, thứ tự chạy, phiên bản phần mềm, gói mở rộng, nhật ký và quy tắc tạo đầu ra. Long (2009) xem việc lập kế hoạch, ghi chép, làm sạch, phân tích, trình bày và lưu trữ là các phần của cùng một quy trình phân tích dữ liệu.
Tiêu chuẩn thực dụng là một người khác có thể bắt đầu từ bản sao dữ liệu đầu vào được phép chia sẻ, chạy master do-file trong một phiên Stata sạch và tạo lại các tệp phân tích cùng bảng kết quả. Nếu phải mở Data Editor để sửa ô, nhấn lại menu theo trí nhớ hoặc chép hệ số từ Results sang Word, phần đó chưa được tự động hóa.
Tái lập không đồng nghĩa với kết luận đúng. Một workflow có thể chạy hoàn hảo nhưng vẫn dùng sai estimator, sai trọng số hoặc sai cấu trúc phụ thuộc. Quy trình kỹ thuật phải đi cùng lập luận phương pháp và kiểm tra giả định.
Không dừng ở việc tái lập một mô hình. Mục tiêu là tái lập chuỗi biến đổi từ dữ liệu đầu vào, dữ liệu dẫn xuất, mẫu phân tích, mô hình, kiểm tra sau ước lượng đến bảng và hình được sử dụng trong báo cáo.
2. Thiết kế cấu trúc dự án trước khi phân tích
Stata Project Manager hỗ trợ tổ chức do-files, datasets, graphs và các tệp liên quan, đồng thời chấp nhận đường dẫn tương đối để dự án có thể di chuyển giữa máy tính (StataCorp, n.d.-a). Bạn vẫn có thể dùng cấu trúc thư mục thông thường nếu nhóm không sử dụng Project Manager.
Dữ liệu gốc nên được đặt ở thư mục chỉ đọc về mặt quy ước. Mọi sửa tên biến, mã hóa giá trị thiếu, ghép bảng hoặc tạo biến phải diễn ra bằng lệnh và được lưu sang data/derived. Cách tách này cho phép quay lại nguồn khi một quyết định làm sạch cần thay đổi.
| Thư mục hoặc tệp | Nội dung | Quy tắc |
|---|---|---|
| data/raw | Tệp nhận từ nguồn | Không ghi đè; lưu ngày nhận và mô tả nguồn |
| data/derived | Tệp đã làm sạch hoặc ghép | Chỉ được tạo bằng do-file |
| do/00_master.do | Điểm chạy toàn bộ dự án | Gọi các bước theo một thứ tự cố định |
| do/10_import_clean.do | Import, chuẩn hóa và kiểm tra | Không chứa mô hình cuối |
| do/20_derive.do | Tạo biến phân tích | Ghi rõ quy tắc và giá trị thiếu |
| do/30_analysis.do | Ước lượng và kiểm tra | Tách phân tích chính với độ nhạy |
| do/40_report.do | Bảng và hình | Sinh trực tiếp từ kết quả Stata |
| output/logs | Log, bảng, hình và tệp báo cáo | Có thể xóa rồi tạo lại từ master |
| README | Nguồn dữ liệu, phiên bản, thứ tự chạy | Đủ để người khác khởi động dự án |
3. Viết master do-file như một bản đồ thực thi
User's Guide của Stata mô tả do-file là tệp lệnh có thể chạy lại, gọi các do-file khác và ghi log đầu ra. Lệnh version ở đầu tệp yêu cầu Stata diễn giải cú pháp theo phiên bản được chỉ định, nhờ đó giảm rủi ro một thay đổi phần mềm làm biến đổi hành vi của lệnh (StataCorp, 2025c).
Master do-file nên ngắn. Nó thiết lập môi trường, mở log, đặt seed khi có thành phần ngẫu nhiên, gọi từng mô-đun và đóng log. Phần làm sạch hoặc ước lượng chi tiết nằm trong các tệp con để lỗi dễ định vị.
version 19.0
clear all
set more off
capture log close _all
log using "output/logs/master.log", text replace
set seed 20261025
do "do/10_import_clean.do"
do "do/20_derive.do"
do "do/30_analysis.do"
do "do/40_report.do"
log close
exitĐường dẫn như C:/Users/TenNguoiDung/Desktop sẽ làm dự án hỏng khi chuyển máy. Đặt thư mục làm việc một lần ở điểm khởi động hoặc dùng Project Manager với đường dẫn tương đối; không ghi thông tin cá nhân hay đường dẫn chứa dữ liệu nhạy cảm vào kho chia sẻ.

4. Import dữ liệu mà vẫn giữ được dấu vết nguồn
Mỗi tệp raw cần có nguồn, ngày nhận, phiên bản và số dòng ban đầu. Sau khi import, dùng describe, codebook và các lệnh kiểm tra phạm vi để xác nhận kiểu biến, nhãn, mã thiếu và đơn vị. Lưu dữ liệu dẫn xuất bằng tên mới; không lưu đè tệp nguồn.
datasignature tạo chữ ký dựa trên giá trị, tên biến và kiểu lưu trữ. datasignature confirm có thể dừng do-file khi dữ liệu không còn khớp chữ ký đã lưu, nên phù hợp để phát hiện tệp nguồn bị thay đổi ngoài quy trình (StataCorp, 2025b). Chữ ký không thay thế quản lý quyền truy cập hoặc sao lưu.
Nếu nguồn là Excel, CSV hoặc hệ quản trị dữ liệu, giữ nguyên tệp xuất ban đầu cùng lệnh import. Một tệp .dta đã chỉnh tay không cho biết cột nào đã được đổi hay trường hợp nào đã bị loại.
use "data/raw/survey_original.dta", clear
describe
codebook respondent_id age income
isid respondent_id
assert inrange(age, 18, 100) if !missing(age)
assert income >= 0 if !missing(income)
datasignature
save "data/derived/survey_stage01.dta", replace5. Biến kỳ vọng thành kiểm tra có thể làm do-file dừng lại
Kiểm tra dữ liệu có giá trị nhất khi một vi phạm tạo mã lỗi và dừng quy trình. assert xác nhận một điều kiện đúng cho các quan sát thuộc phạm vi kiểm tra; isid xác nhận một biến hoặc tổ hợp biến định danh duy nhất. Hai lệnh này biến giả định ngầm thành điều kiện có thể kiểm toán (StataCorp, 2025b).
Giá trị thiếu số trong Stata lớn hơn mọi số hữu hạn. Vì vậy, điều kiện age >= 18 sẽ chấp nhận age bằng dấu chấm nếu không thêm !missing(age). Đây là lý do kiểm tra phạm vi phải nói rõ cách xử lý thiếu.
Kiểm tra nên bám codebook: giá trị hợp lệ của biến phân loại, miền của thang điểm, quan hệ giữa các biến và số quan sát dự kiến. Không xóa ngoại lệ chỉ vì nó làm hệ số thay đổi; trước hết cần phân loại lỗi nhập, đơn vị đo khác, nhóm con có thật hoặc giá trị cực đoan hợp lệ.
| Kỳ vọng | Lệnh gợi ý | Khi vi phạm |
|---|---|---|
| Mỗi người có một dòng | isid respondent_id | Kiểm tra trùng ID và cấu trúc long hoặc wide |
| Likert chỉ nhận 1 đến 5 | assert inrange(q1,1,5) if !missing(q1) | Đối chiếu codebook và tệp gốc |
| Ngày kết thúc không trước ngày bắt đầu | assert end_date >= start_date | Kiểm tra định dạng ngày và lỗi nhập |
| Không có giá trị thiếu ở khóa | assert !missing(respondent_id) | Dừng merge cho đến khi khóa được xử lý |
| Số dòng sau lọc đúng dự kiến | count; assert r(N) == ... | Rà điều kiện lọc và phiên bản dữ liệu |
6. Merge an toàn bắt đầu bằng kiểm tra khóa
merge ghép các quan sát theo một hoặc nhiều khóa và tạo biến _merge để chỉ ra dòng chỉ có ở master, chỉ có ở using hoặc xuất hiện ở cả hai tệp (StataCorp, 2025b). Trước khi ghép, phải kiểm tra tính duy nhất của khóa ở từng phía theo quan hệ 1:1, 1:m hoặc m:1 dự kiến.
Không nên dùng merge m:m để chữa lỗi khóa trùng. Phép ghép many-to-many có thể tạo các cặp theo thứ tự quan sát thay vì quan hệ nghiên cứu mong muốn. Hãy xác định lại đơn vị phân tích, bổ sung biến khóa hoặc tổng hợp đúng cấp trước khi ghép.
Sau merge, tabulate _merge và đối chiếu các trường hợp không khớp. Chỉ drop _merge sau khi lưu bằng chứng kiểm tra. Các tùy chọn assert() và keep() hữu ích khi nhóm đã xác định trước trạng thái được chấp nhận; một trạng thái ngoài dự kiến sẽ làm lệnh báo lỗi thay vì bị bỏ qua.
use "data/derived/respondents.dta", clear
isid respondent_id
preserve
use "data/derived/province_lookup.dta", clear
isid province_code
restore
merge m:1 province_code using "data/derived/province_lookup.dta"
tabulate _merge
assert inlist(_merge, 1, 3)
count if _merge == 1
drop _merge
save "data/derived/analysis_ready.dta", replace7. Chọn estimator từ thiết kế dữ liệu, không từ lệnh quen tay
Lệnh ước lượng phải phù hợp với biến kết quả, cấu trúc phụ thuộc và cách lấy mẫu. regress có thể phù hợp cho kết quả liên tục trong dữ liệu cắt ngang khi các giả định liên quan được xem xét. logit hoặc probit xử lý kết quả nhị phân. Dữ liệu panel có thể cần xtset cùng mô hình panel; dữ liệu phân cấp có thể cần mixed hoặc meglm; mẫu khảo sát phức tạp phải được khai báo bằng svyset trước khi dùng tiền tố svy (StataCorp, 2025a).
Sai số chuẩn robust không sửa sai dạng hàm, nội sinh, sai số đo hoặc chọn mẫu. Clustered standard errors cũng không tự biến dữ liệu thành panel hợp lệ. Báo cáo phải nêu đơn vị cluster, số cluster và lý do chọn cấu trúc phương sai.
Trọng số cần được xác định theo thiết kế và ý nghĩa của chúng. Không thay pweight, fweight, aweight hoặc iweight cho nhau chỉ vì lệnh chấp nhận. Khi dữ liệu đến từ khảo sát phức tạp, strata, primary sampling units và weights thuộc cùng thiết kế suy luận.
| Dữ liệu hoặc mục tiêu | Nhóm lệnh xem xét | Thông tin phải báo cáo |
|---|---|---|
| Kết quả liên tục cắt ngang | regress | Đặc tả, SE, kiểm tra phần dư và quan sát ảnh hưởng |
| Kết quả nhị phân | logit hoặc probit | Thang hệ số, odds ratio hoặc marginal effects |
| Panel | xtreg, xtlogit hoặc mô hình phù hợp | Panel ID, thời gian, lựa chọn FE/RE và SE |
| Phân cấp | mixed hoặc meglm | Cấp ngẫu nhiên, cấu trúc phương sai và ICC khi phù hợp |
| Khảo sát phức tạp | svyset và svy: | PSU, strata, weights và phương pháp phương sai |
| SEM hoặc GSEM | sem hoặc gsem | Mô hình đo lường, estimator, nhận dạng và fit phù hợp |
8. Khóa thành phần ngẫu nhiên, phiên bản và gói mở rộng
set seed xác định điểm bắt đầu của bộ sinh số giả ngẫu nhiên. Cùng seed và cùng chuỗi lệnh sẽ tái tạo cùng chuỗi số đối với bộ sinh tương ứng; không nên đặt lại seed nhiều lần bên trong vòng lặp vì có thể tạo cấu trúc lặp ngoài ý muốn (StataCorp, 2025a).
Ghi version ở đầu master do-file và lưu c(returned) hoặc about trong log để biết bản Stata đã chạy. Với lệnh do cộng đồng phát triển, ghi tên gói, phiên bản hoặc ngày cài cùng nguồn cài đặt. Một do-file gọi lệnh chưa được khai báo sẽ khó chạy trên máy mới.
Tái lập số học còn phụ thuộc dữ liệu và thứ tự lệnh. Sort không ổn định khi khóa sắp xếp bị trùng có thể làm một thao tác chọn theo vị trí trả kết quả khác; vì vậy hãy bổ sung khóa duy nhất trước khi dùng _n hoặc giữ một hàng theo thứ tự.
set seed không sửa được dữ liệu đã thay đổi, lệnh chạy sai thứ tự, gói khác phiên bản hoặc quyết định làm sạch thực hiện ngoài do-file. Hãy xem seed là một thành phần của hồ sơ tái lập, không phải bảo đảm duy nhất.
9. Tách ước lượng chính, kiểm tra sau ước lượng và phân tích độ nhạy
Tệp analysis nên xác định rõ mô hình chính trước, lưu estimates và tạo các đại lượng cần báo cáo bằng margins, contrast, lincom hoặc nlcom khi phù hợp. Kết quả phụ thuộc vào thang đo của mô hình; hệ số logit, odds ratio và xác suất dự báo không được diễn giải như cùng một đại lượng.
Các kiểm tra sau ước lượng cần gắn với estimator. Kiểm tra phần dư của OLS không thể sao chép nguyên sang mô hình nhị phân, panel hay multilevel. Một workflow tốt lưu cả lệnh kiểm tra và tiêu chí diễn giải, nhưng không biến một p-value chẩn đoán thành lệnh tự động xóa quan sát.
Phân tích độ nhạy nên nằm ở khối riêng: thay đặc tả có căn cứ, cách mã hóa hợp lý, SE hoặc cấu trúc mẫu. Việc thử nhiều mô hình rồi chỉ giữ kết quả thuận lợi làm mất tính minh bạch ngay cả khi toàn bộ thao tác đã được mã hóa.
Đặc tả mô hình chính
Ghi biến kết quả, tập biến giải thích, tương tác, trọng số và cấu trúc SE trước khi xem nhiều biến thể.
Lưu kết quả
Dùng estimates store hoặc collect để bảng sau này lấy đúng mô hình đã định.
Kiểm tra hậu ước lượng
Chọn lệnh chẩn đoán phù hợp với estimator và đơn vị phân tích.
Chạy độ nhạy
Mỗi biến thể phải có lý do và nhãn riêng; không ghi đè mô hình chính.
Đối chiếu mẫu
Kiểm tra e(sample), số quan sát và nguyên nhân mẫu thay đổi giữa các mô hình.
10. Sinh bảng và hình trực tiếp từ Stata
Sao chép số từ Results sang Word tạo một nhánh thủ công mà Stata không thể kiểm tra. Các công cụ collect, etable, putdocx, putexcel, dyndoc và markdown cho phép tạo bảng hoặc tài liệu từ kết quả đang lưu; tài liệu có thể được cập nhật bằng cách chạy lại lệnh khi dữ liệu thay đổi (StataCorp, n.d.-b).
Tệp báo cáo nên ghi tiêu đề mô hình, biến phụ thuộc, dạng SE, số quan sát, đơn vị cluster, trọng số và ghi chú về thang hệ số. Làm tròn chỉ xảy ra ở lớp trình bày. Dữ liệu đầy đủ trong bộ nhớ vẫn giữ độ chính xác cho phép tính tiếp theo.
Một bảng đẹp chưa đủ để kiểm toán. Lưu log văn bản, do-files, danh sách phiên bản và bảng ánh xạ giữa tên bảng trong bản thảo với tệp đầu ra. Nếu một kết quả trong bài không truy được về lệnh đã chạy, workflow còn thiếu một liên kết.
| Công cụ | Đầu ra | Khi phù hợp |
|---|---|---|
| collect và etable | Bảng kết quả có thể tùy biến | So sánh nhiều mô hình trong Stata 17 trở lên |
| putdocx | Word | Báo cáo cần văn bản, bảng và hình |
| putexcel | Excel | Bàn giao bảng cho quy trình dùng workbook |
| dyndoc hoặc markdown | HTML hoặc Word | Tài liệu động kết hợp diễn giải và lệnh |
| graph export | PNG, SVG, PDF hoặc định dạng khác | Hình cần tạo lại từ lệnh |
11. Ví dụ giả định: từ dữ liệu khảo sát đến mô hình có cluster
Ví dụ này minh họa workflow, không phải kết quả nghiên cứu thật. Giả sử dữ liệu gồm 1.200 người thuộc 60 trường, kết quả wellbeing liên tục và một số biến giải thích ở cấp cá nhân. respondent_id phải duy nhất; school_id xác định cụm dùng cho sai số chuẩn.
Tệp clean kiểm tra ID, phạm vi tuổi và mã thiếu, sau đó lưu analysis_ready.dta. Tệp analysis nạp đúng bản dẫn xuất, mô tả mẫu, chạy mô hình chính với vce(cluster school_id), lưu estimates và tính giá trị dự báo. Báo cáo phải nói rõ có 60 cụm, vì số quan sát cá nhân không thay thế số đơn vị độc lập ở cấp trường.
Nếu giả thuyết yêu cầu hiệu ứng ngẫu nhiên giữa trường, clustered SE không thay thế mixed model. Lựa chọn giữa mô hình biên với SE theo cụm và mô hình đa cấp phải dựa vào câu hỏi cùng cấu trúc sinh dữ liệu.
use "data/derived/analysis_ready.dta", clear
isid respondent_id
assert !missing(school_id)
misstable summarize wellbeing age female exposure
summarize wellbeing age exposure
tabulate female
regress wellbeing c.exposure c.age i.female, vce(cluster school_id)
estimates store main_ols
margins, at(exposure=(0 1 2 3 4))
marginsplot, name(fig_margins, replace)
graph export "output/figures/margins.svg", replace12. Mẫu mô tả workflow trong luận văn hoặc bài báo
Phần mềm và workflow cần được mô tả đủ để người đọc hiểu cách kết quả được tạo ra. Không cần chép toàn bộ do-file vào phương pháp, nhưng nên cung cấp phiên bản, các bước xử lý chính, estimator, SE hoặc thiết kế khảo sát và nơi lưu mã khi có thể.
Mẫu dưới đây cần thay bằng thông tin thật của nghiên cứu. Không giữ các lựa chọn trong ngoặc nếu bài chỉ dùng một phương án.
Mẫu báo cáo tiếng Việt
Phân tích được thực hiện bằng Stata 19. Toàn bộ quy trình được điều khiển bởi một master do-file, lần lượt import và kiểm tra dữ liệu, tạo biến dẫn xuất, ước lượng mô hình và sinh bảng cùng hình. Dữ liệu gốc được giữ bất biến; khóa ghép được kiểm tra bằng isid và trạng thái ghép được đối chiếu qua _merge. Thành phần ngẫu nhiên sử dụng seed [số seed]. Mô hình [tên mô hình] được ước lượng với [loại sai số chuẩn/trọng số/khai báo survey] vì [lý do theo thiết kế]. Do-files, log và thông tin phiên bản gói được lưu tại [kho hoặc phụ lục, nếu được phép chia sẻ].
13. Bảng kiểm trước khi bàn giao dự án Stata
- Master do-file chạy từ một phiên Stata sạch mà không cần thao tác tay.
- Dữ liệu raw không bị ghi đè và có thông tin nguồn cùng ngày nhận.
- Mọi tệp trong data/derived được tạo bằng lệnh.
- Các khóa được kiểm tra bằng isid trước khi merge.
- Trạng thái _merge được đối chiếu và các trường hợp không khớp được giải thích.
- Mã thiếu, miền giá trị và quan hệ logic giữa biến được kiểm tra bằng lệnh.
- version, seed, phiên bản Stata và gói mở rộng đã được ghi lại.
- Estimator, weights, survey design hoặc cluster phù hợp với thiết kế dữ liệu.
- Mô hình chính được tách khỏi phân tích độ nhạy.
- Bảng và hình được sinh từ lệnh, không sao chép số thủ công.
- Log không chứa đường dẫn, thông tin cá nhân hoặc dữ liệu nhạy cảm không cần thiết.
- README nêu thứ tự chạy, đầu vào cần có và đầu ra dự kiến.
Kết luận
Workflow Stata đáng tin bắt đầu từ dữ liệu raw bất biến và kết thúc bằng bảng, hình được sinh tự động. Master do-file giữ thứ tự thực thi; các lệnh assert, isid, merge và datasignature chuyển kỳ vọng dữ liệu thành kiểm tra có thể quan sát.
Khả năng chạy lại chưa thay thế phán đoán phương pháp. Estimator, trọng số, cluster và mô hình độ nhạy vẫn phải được chọn theo câu hỏi nghiên cứu cùng thiết kế dữ liệu, sau đó được ghi rõ trong báo cáo.
Tài liệu tham khảo
- Long, J. S. (2009). The workflow of data analysis using Stata. Stata Press. https://www.stata-press.com/books/workflow-data-analysis-stata/
- StataCorp. (2025a). Stata 19 base reference manual. Stata Press. https://www.stata.com/bookstore/base-reference-manual/
- StataCorp. (2025b). Stata 19 data management reference manual. Stata Press. https://www.stata.com/bookstore/data-management-reference-manual/
- StataCorp. (2025c). Stata 19 user's guide. Stata Press. https://www.stata.com/manuals/u.pdf
- StataCorp. (n.d.-a). Project Manager. https://www.stata.com/features/overview/project-manager/
- StataCorp. (n.d.-b). Truly reproducible reporting. https://www.stata.com/features/overview/truly-reproducible-reporting/
Ghi chú học thuật: Các tên tệp và số liệu trong ví dụ là giả định. Hãy thay bằng cấu trúc dữ liệu, thiết kế mẫu, phiên bản Stata và chính sách chia sẻ dữ liệu thực tế của nghiên cứu.
