Sort Cases và phát hiện bản ghi trùng, mã sai, giá trị bất hợp lý là bài 12 của chuyên đề SPSS trong phân tích dữ liệu BĐS. Dùng Sort Cases, Identify Duplicate Cases, Frequencies và min/max để phát hiện lỗi nhưng không xóa nhầm các lặp hợp lệ theo thời gian.
Biên soạn: ThS. Nguyễn Mạnh Hùng
GV. Khoa QLĐĐ&BĐS – ĐH Nông Lâm TP.HCM
Email: nguyenmanhhung@hcmuaf.edu.vn
Cập nhật 01/10/2026: Nội dung đối chiếu với IBM SPSS Statistics 31 và các tài liệu phương pháp nêu ở cuối bài. Dữ liệu BĐS trong ví dụ là giả lập phục vụ giảng dạy, trừ khi ghi rõ nguồn khác.
Vị trí của bài trong mạch học
Bài thuộc Chương 2 – Nhập, chuẩn hóa và làm sạch dữ liệu. Mục tiêu là làm dữ liệu đáng tin và có thể truy vết trước khi bước sang thống kê mô tả. Bài nối trực tiếp quy tắc ở Bài 1–10: hiểu mỗi dòng, mỗi cột và thuộc tính biến trước khi bấm Analyze.
1. Sort giúp nhìn cấu trúc
Sắp tăng/giảm làm mã lặp, cực trị và giá trị sai dễ thấy nhưng không tự sửa dữ liệu.
Liên hệ BĐS: với giá, diện tích, khu vực, loại hình hoặc dữ liệu khảo sát, một thao tác đúng kỹ thuật vẫn có thể tạo kết quả sai nghĩa nếu đơn vị quan sát, mã hóa, missing hoặc phạm vi mẫu chưa được kiểm. Vì vậy sau mỗi thao tác phải đối chiếu với codebook và ít nhất một số case cụ thể.
Cách tự kiểm: lưu trạng thái trước thao tác, chạy công cụ, ghi N/giá trị đầu ra, rồi kiểm ngược 5–10 dòng. Nếu không giải thích được vì sao một case được giữ, đổi nhóm, trở thành missing hoặc xuất hiện trong Output, chưa chuyển bước.
2. Nhiều khóa sort
Có thể sort khu vực rồi giá giảm trong từng khu vực; thứ tự khóa phải được hiểu đúng.
Liên hệ BĐS: với giá, diện tích, khu vực, loại hình hoặc dữ liệu khảo sát, một thao tác đúng kỹ thuật vẫn có thể tạo kết quả sai nghĩa nếu đơn vị quan sát, mã hóa, missing hoặc phạm vi mẫu chưa được kiểm. Vì vậy sau mỗi thao tác phải đối chiếu với codebook và ít nhất một số case cụ thể.
Cách tự kiểm: lưu trạng thái trước thao tác, chạy công cụ, ghi N/giá trị đầu ra, rồi kiểm ngược 5–10 dòng. Nếu không giải thích được vì sao một case được giữ, đổi nhóm, trở thành missing hoặc xuất hiện trong Output, chưa chuyển bước.
3. Duplicate phải định nghĩa bằng nghiệp vụ
Cùng ma_bds có thể là lỗi hoặc cùng tài sản ở hai ngày; khóa cần phản ánh đơn vị quan sát.
Liên hệ BĐS: với giá, diện tích, khu vực, loại hình hoặc dữ liệu khảo sát, một thao tác đúng kỹ thuật vẫn có thể tạo kết quả sai nghĩa nếu đơn vị quan sát, mã hóa, missing hoặc phạm vi mẫu chưa được kiểm. Vì vậy sau mỗi thao tác phải đối chiếu với codebook và ít nhất một số case cụ thể.
Cách tự kiểm: lưu trạng thái trước thao tác, chạy công cụ, ghi N/giá trị đầu ra, rồi kiểm ngược 5–10 dòng. Nếu không giải thích được vì sao một case được giữ, đổi nhóm, trở thành missing hoặc xuất hiện trong Output, chưa chuyển bước.
4. Identify Duplicate Cases tạo cờ
Nên tạo indicator/sequence để kiểm nhóm trùng trước khi xóa.
Liên hệ BĐS: với giá, diện tích, khu vực, loại hình hoặc dữ liệu khảo sát, một thao tác đúng kỹ thuật vẫn có thể tạo kết quả sai nghĩa nếu đơn vị quan sát, mã hóa, missing hoặc phạm vi mẫu chưa được kiểm. Vì vậy sau mỗi thao tác phải đối chiếu với codebook và ít nhất một số case cụ thể.
Cách tự kiểm: lưu trạng thái trước thao tác, chạy công cụ, ghi N/giá trị đầu ra, rồi kiểm ngược 5–10 dòng. Nếu không giải thích được vì sao một case được giữ, đổi nhóm, trở thành missing hoặc xuất hiện trong Output, chưa chuyển bước.
5. Missing ở khóa gây trùng giả
Nhiều ID thiếu có thể bị xem là matching; cần xử lý khóa trước.
Liên hệ BĐS: với giá, diện tích, khu vực, loại hình hoặc dữ liệu khảo sát, một thao tác đúng kỹ thuật vẫn có thể tạo kết quả sai nghĩa nếu đơn vị quan sát, mã hóa, missing hoặc phạm vi mẫu chưa được kiểm. Vì vậy sau mỗi thao tác phải đối chiếu với codebook và ít nhất một số case cụ thể.
Cách tự kiểm: lưu trạng thái trước thao tác, chạy công cụ, ghi N/giá trị đầu ra, rồi kiểm ngược 5–10 dòng. Nếu không giải thích được vì sao một case được giữ, đổi nhóm, trở thành missing hoặc xuất hiện trong Output, chưa chuyển bước.
6. Mã sai phát hiện bằng Frequencies
Category ngoài bảng mã phải được xác minh chứ không tự sửa.
Liên hệ BĐS: với giá, diện tích, khu vực, loại hình hoặc dữ liệu khảo sát, một thao tác đúng kỹ thuật vẫn có thể tạo kết quả sai nghĩa nếu đơn vị quan sát, mã hóa, missing hoặc phạm vi mẫu chưa được kiểm. Vì vậy sau mỗi thao tác phải đối chiếu với codebook và ít nhất một số case cụ thể.
Cách tự kiểm: lưu trạng thái trước thao tác, chạy công cụ, ghi N/giá trị đầu ra, rồi kiểm ngược 5–10 dòng. Nếu không giải thích được vì sao một case được giữ, đổi nhóm, trở thành missing hoặc xuất hiện trong Output, chưa chuyển bước.
7. Lỗi logic khác outlier
Diện tích âm là sai logic; giá rất cao có thể là thật. Bài 21 mới đi sâu outlier.
Liên hệ BĐS: với giá, diện tích, khu vực, loại hình hoặc dữ liệu khảo sát, một thao tác đúng kỹ thuật vẫn có thể tạo kết quả sai nghĩa nếu đơn vị quan sát, mã hóa, missing hoặc phạm vi mẫu chưa được kiểm. Vì vậy sau mỗi thao tác phải đối chiếu với codebook và ít nhất một số case cụ thể.
Cách tự kiểm: lưu trạng thái trước thao tác, chạy công cụ, ghi N/giá trị đầu ra, rồi kiểm ngược 5–10 dòng. Nếu không giải thích được vì sao một case được giữ, đổi nhóm, trở thành missing hoặc xuất hiện trong Output, chưa chuyển bước.
8. Sai đơn vị tạo cực trị
Triệu/tỷ hoặc m²/ha lẫn nhau thường lộ qua min/max và sort.
Liên hệ BĐS: với giá, diện tích, khu vực, loại hình hoặc dữ liệu khảo sát, một thao tác đúng kỹ thuật vẫn có thể tạo kết quả sai nghĩa nếu đơn vị quan sát, mã hóa, missing hoặc phạm vi mẫu chưa được kiểm. Vì vậy sau mỗi thao tác phải đối chiếu với codebook và ít nhất một số case cụ thể.
Cách tự kiểm: lưu trạng thái trước thao tác, chạy công cụ, ghi N/giá trị đầu ra, rồi kiểm ngược 5–10 dòng. Nếu không giải thích được vì sao một case được giữ, đổi nhóm, trở thành missing hoặc xuất hiện trong Output, chưa chuyển bước.
9. Gắn cờ thay vì overwrite
Biến flag và biên bản QA giữ dấu vết xử lý.
Liên hệ BĐS: với giá, diện tích, khu vực, loại hình hoặc dữ liệu khảo sát, một thao tác đúng kỹ thuật vẫn có thể tạo kết quả sai nghĩa nếu đơn vị quan sát, mã hóa, missing hoặc phạm vi mẫu chưa được kiểm. Vì vậy sau mỗi thao tác phải đối chiếu với codebook và ít nhất một số case cụ thể.
Cách tự kiểm: lưu trạng thái trước thao tác, chạy công cụ, ghi N/giá trị đầu ra, rồi kiểm ngược 5–10 dòng. Nếu không giải thích được vì sao một case được giữ, đổi nhóm, trở thành missing hoặc xuất hiện trong Output, chưa chuyển bước.
10. Chạy lại cùng phép kiểm
Sau sửa phải Frequencies/Sort/duplicate check lại và lưu bản mới.
Liên hệ BĐS: với giá, diện tích, khu vực, loại hình hoặc dữ liệu khảo sát, một thao tác đúng kỹ thuật vẫn có thể tạo kết quả sai nghĩa nếu đơn vị quan sát, mã hóa, missing hoặc phạm vi mẫu chưa được kiểm. Vì vậy sau mỗi thao tác phải đối chiếu với codebook và ít nhất một số case cụ thể.
Cách tự kiểm: lưu trạng thái trước thao tác, chạy công cụ, ghi N/giá trị đầu ra, rồi kiểm ngược 5–10 dòng. Nếu không giải thích được vì sao một case được giữ, đổi nhóm, trở thành missing hoặc xuất hiện trong Output, chưa chuyển bước.
Bộ dữ liệu thực hành xuyên suốt
Các bài 11–20 dùng một cấu trúc BĐS thống nhất để tập trung vào phương pháp. Có thể thay bằng dữ liệu thật nếu giữ đúng ý nghĩa biến, đơn vị và yêu cầu bảo mật.
| Tên biến | Kiểu | Ý nghĩa | Mã/đơn vị | Measure |
|---|---|---|---|---|
| ma_bds | String | Mã quan sát/tài sản | — | Nominal |
| khu_vuc | Numeric | Khu vực | 1=Trung tâm; 2=Cận trung tâm; 3=Ngoại vi | Nominal |
| loai_bds | Numeric | Loại BĐS | 1=Căn hộ; 2=Nhà phố; 3=Đất ở | Nominal |
| dien_tich | Numeric | Diện tích | m² | Scale |
| gia_rao | Numeric | Giá rao | triệu đồng | Scale |
| gia_m2 | Numeric | Đơn giá | triệu đồng/m² | Scale |
| khoang_cach_tam | Numeric | Khoảng cách | km | Scale |
| nam_xay_dung | Numeric | Năm xây dựng | năm | Scale |
| muc_hai_long | Numeric | Mức hài lòng | 1–5; 99=không trả lời nếu đã khai Missing | Ordinal |
| y_dinh_mua | Numeric | Ý định mua | 1–5; 99=không trả lời nếu đã khai Missing | Ordinal |
Cú pháp tham khảo
Nên bấm Paste ở hộp thoại quan trọng để lưu dấu vết thao tác. Syntax dưới đây minh họa logic của bài và cần đổi tên biến theo tệp thực tế.
SORT CASES BY ma_bds(A) ngay_khao_sat(A). SORT CASES BY khu_vuc(A) gia_rao(D). FREQUENCIES VARIABLES=khu_vuc loai_bds muc_hai_long. DESCRIPTIVES VARIABLES=dien_tich gia_rao nam_xay_dung /STATISTICS=MEAN STDDEV MIN MAX.Tình huống thực hành BĐS
1.200 tin rao có 17 mã BĐS lặp; 8 là nhập đôi, 9 là cập nhật hợp lệ theo ngày. Nếu xóa theo ma_bds sẽ mất chuỗi thời gian. Đồng thời có diện tích 0 và giá sai đơn vị cần xử lý riêng.
Trong tình huống này, sinh viên phải tách ba việc: phát hiện – xác minh – xử lý. Không được nhảy từ phát hiện sang xóa/sửa khi chưa có căn cứ từ nguồn, codebook hoặc quy tắc nghiên cứu.
Ma trận lựa chọn nhanh
| Tình huống | Cách hiểu/công cụ | Điểm phải kiểm |
|---|---|---|
| Cùng mã+cùng ngày | Nghi duplicate thật | Xác minh nguồn |
| Cùng mã+khác ngày | Có thể lặp hợp lệ | Khóa mã+ngày |
| Mã khu vực=7 | Ngoài bảng mã | Frequencies |
| Diện tích âm | Sai logic | Gắn cờ/sửa theo nguồn |
| Giá cực cao | Hiếm hoặc sai đơn vị | Chưa gọi outlier sai |
Bài thực hành
Tạo 250 case với 10 nhóm lặp nhiều nguyên nhân, 5 mã sai và 5 lỗi logic; lập biên bản QA bằng Sort, Identify Duplicate Cases, Frequencies và Descriptives.
Sản phẩm phải nộp
- Biến/cờ duplicate
- Bảng nhóm trùng và quyết định
- Danh sách mã ngoài miền
- Bảng lỗi logic/sai đơn vị
- 02_LAM_SACH.sav
Những lỗi thường gặp
- Dùng số dòng làm ID
- Xóa duplicate ngay
- Định nghĩa trùng chỉ bằng tên
- Bỏ qua missing trong key
- Sửa mã theo phỏng đoán
- Xóa giá cực trị chưa kiểm đơn vị
Sổ tay thao tác nhanh
- Lưu bản trước thao tác bằng tên version rõ.
- Kiểm Type, Values, Missing, Measure của biến dùng.
- Viết câu hỏi cần trả lời trước khi mở menu.
- Thực hiện và Paste Syntax nếu quy tắc/công thức phức tạp.
- Kiểm N trước–sau và 5–10 case cụ thể.
- Đối chiếu Output với nguồn; không chỉ nhìn bảng đẹp.
- Ghi lỗi/quyết định/lý do vào biên bản QA.
- Save As bản mới, không overwrite nguồn duy nhất.
Phản biện chéo tại lớp
Một nhóm thao tác; nhóm còn lại hỏi về dữ liệu đầu vào, đơn vị quan sát, biến được dùng, thuộc tính biến, tác động của thao tác tới hàng/cột/giá trị và tình huống có thể làm kết quả sai. Người thực hiện phải giải thích được cả thao tác và ý nghĩa.
Sau phản biện, ghi ba điểm: điều làm đúng, lỗi/rủi ro phát hiện và biện pháp ngăn lỗi lặp lại.
Tình huống kiểm tra cuối bài
Giảng viên giao tệp 300–600 case có vấn đề liên quan trực tiếp đến Sort Cases và phát hiện bản ghi trùng, mã sai, giá trị bất hợp lý. Sinh viên ghi trạng thái ban đầu, quy tắc kiểm, thao tác, Output/Syntax và bảng trước–sau. Điểm dựa cả vào lý do, không chỉ kết quả cuối.
Phiếu tự kiểm
- Tôi có giữ bản dữ liệu gốc/bản trước thao tác không?
- Tôi có hiểu mỗi dòng và mỗi biến đại diện cho gì không?
- Type, Values, Missing, Measure của biến chính có đúng không?
- Tôi có ghi điều kiện/công thức/ngưỡng thay vì sửa cảm tính không?
- N trước và sau thao tác có hợp lý không?
- Tôi có kiểm 5–10 case cụ thể không?
- Tôi có vô tình xóa/overwrite dữ liệu không?
- Output có category/missing/đơn vị bất thường không?
- Syntax/biên bản có đủ để tái hiện không?
- Tôi có phân biệt mô tả với suy luận không?
- Tôi có ghi giới hạn của thao tác không?
- Tệp sau xử lý có version rõ không?
Ghi nhớ trong 30 giây
- Sort giúp nhìn chứ không làm sạch
- Duplicate phải theo khóa nghiệp vụ
- Trùng key chưa chắc lỗi
- Tách lỗi logic khỏi giá trị hiếm
- Xác minh trước khi sửa/xóa
Nguồn tham khảo
Nguồn kỹ thuật chính là IBM SPSS Statistics 31; nguồn phương pháp bổ sung dùng để giải thích cách đọc thống kê/đồ thị. Khi menu trên máy khác bài, đối chiếu đúng phiên bản SPSS đang sử dụng.
- https://www.ibm.com/docs/en/spss-statistics/31.0.0?topic=cases-overview-sort-command
- https://www.ibm.com/docs/SSLVMB_31.0.0/pdf/IBM_SPSS_Statistics_Core_System_User_Guide.pdf
- https://www.ibm.com/docs/en/spss-statistics/30.0.0?topic=preparation-identifying-duplicate-cases
Bài tiếp theo
Recode into Different Variables: mã hóa lại biến mà vẫn giữ dữ liệu gốc.
Bài luyện tập mở rộng
Luyện tập 1: Sort giúp nhìn cấu trúc
Tạo một bản dữ liệu nhỏ có vấn đề liên quan đến Sort giúp nhìn cấu trúc và Nhiều khóa sort. Trước khi thao tác, viết dự đoán về N hoặc cấu trúc kết quả. Thực hiện đúng công cụ của bài, lưu Output/Syntax và kiểm lại bằng ít nhất 5 case.
Phần giải thích: trình bày 120–180 từ về vì sao sắp tăng/giảm làm mã lặp, cực trị và giá trị sai dễ thấy nhưng không tự sửa dữ liệu. Đồng thời đối chiếu với nguyên tắc thứ hai: có thể sort khu vực rồi giá giảm trong từng khu vực; thứ tự khóa phải được hiểu đúng. Nếu kết quả khác dự đoán, xác định chênh lệch do dữ liệu hay do thao tác.
Luyện tập 2: Duplicate phải định nghĩa bằng nghiệp vụ
Tạo một bản dữ liệu nhỏ có vấn đề liên quan đến Duplicate phải định nghĩa bằng nghiệp vụ và Identify Duplicate Cases tạo cờ. Trước khi thao tác, viết dự đoán về N hoặc cấu trúc kết quả. Thực hiện đúng công cụ của bài, lưu Output/Syntax và kiểm lại bằng ít nhất 5 case.
Phần giải thích: trình bày 120–180 từ về vì sao cùng ma_bds có thể là lỗi hoặc cùng tài sản ở hai ngày; khóa cần phản ánh đơn vị quan sát. Đồng thời đối chiếu với nguyên tắc thứ hai: nên tạo indicator/sequence để kiểm nhóm trùng trước khi xóa. Nếu kết quả khác dự đoán, xác định chênh lệch do dữ liệu hay do thao tác.
Luyện tập 3: Missing ở khóa gây trùng giả
Tạo một bản dữ liệu nhỏ có vấn đề liên quan đến Missing ở khóa gây trùng giả và Mã sai phát hiện bằng Frequencies. Trước khi thao tác, viết dự đoán về N hoặc cấu trúc kết quả. Thực hiện đúng công cụ của bài, lưu Output/Syntax và kiểm lại bằng ít nhất 5 case.
Phần giải thích: trình bày 120–180 từ về vì sao nhiều id thiếu có thể bị xem là matching; cần xử lý khóa trước. Đồng thời đối chiếu với nguyên tắc thứ hai: category ngoài bảng mã phải được xác minh chứ không tự sửa. Nếu kết quả khác dự đoán, xác định chênh lệch do dữ liệu hay do thao tác.
Luyện tập 4: Lỗi logic khác outlier
Tạo một bản dữ liệu nhỏ có vấn đề liên quan đến Lỗi logic khác outlier và Sai đơn vị tạo cực trị. Trước khi thao tác, viết dự đoán về N hoặc cấu trúc kết quả. Thực hiện đúng công cụ của bài, lưu Output/Syntax và kiểm lại bằng ít nhất 5 case.
Phần giải thích: trình bày 120–180 từ về vì sao diện tích âm là sai logic; giá rất cao có thể là thật. bài 21 mới đi sâu outlier. Đồng thời đối chiếu với nguyên tắc thứ hai: triệu/tỷ hoặc m²/ha lẫn nhau thường lộ qua min/max và sort. Nếu kết quả khác dự đoán, xác định chênh lệch do dữ liệu hay do thao tác.
Luyện tập 5: Gắn cờ thay vì overwrite
Tạo một bản dữ liệu nhỏ có vấn đề liên quan đến Gắn cờ thay vì overwrite và Chạy lại cùng phép kiểm. Trước khi thao tác, viết dự đoán về N hoặc cấu trúc kết quả. Thực hiện đúng công cụ của bài, lưu Output/Syntax và kiểm lại bằng ít nhất 5 case.
Phần giải thích: trình bày 120–180 từ về vì sao biến flag và biên bản qa giữ dấu vết xử lý. Đồng thời đối chiếu với nguyên tắc thứ hai: sau sửa phải frequencies/sort/duplicate check lại và lưu bản mới. Nếu kết quả khác dự đoán, xác định chênh lệch do dữ liệu hay do thao tác.
Luyện tập 6: Sort giúp nhìn cấu trúc
Tạo một bản dữ liệu nhỏ có vấn đề liên quan đến Sort giúp nhìn cấu trúc và Nhiều khóa sort. Trước khi thao tác, viết dự đoán về N hoặc cấu trúc kết quả. Thực hiện đúng công cụ của bài, lưu Output/Syntax và kiểm lại bằng ít nhất 5 case.
Phần giải thích: trình bày 120–180 từ về vì sao sắp tăng/giảm làm mã lặp, cực trị và giá trị sai dễ thấy nhưng không tự sửa dữ liệu. Đồng thời đối chiếu với nguyên tắc thứ hai: có thể sort khu vực rồi giá giảm trong từng khu vực; thứ tự khóa phải được hiểu đúng. Nếu kết quả khác dự đoán, xác định chênh lệch do dữ liệu hay do thao tác.
Biên bản QA tối thiểu
| Mục | Trước | Quy tắc/thao tác | Sau | Xác nhận |
|---|---|---|---|---|
| Số case | Ghi N | Theo đúng mục tiêu | Ghi N sau | Hợp lý |
| Biến chính | Type/Measure | Kiểm thuộc tính | Không đổi ngoài ý muốn | Đạt/không đạt |
| Missing/category | Ghi hiện trạng | Theo quy tắc bài | Ghi sau | Không hợp thức hóa lỗi |
| Giá trị bất thường | Danh sách | Xác minh nguồn | Giữ/sửa/gắn cờ | Có lý do |
| Version | Tên file trước | Save As | Tên file sau | Không overwrite |