Khai báo và mã hóa biến trong SPSS, PSPP

KHAI BÁO VÀ MÃ HÓA BIẾN TRONG SPSS/PSPP

Lập bảng mã hóa, đặt tên biến, khai báo nhãn, giá trị thiếu và cấp độ đo trước khi nhập phiếu

Bài nên đọc trước

Trước khi chạy bất kỳ phân tích nào, mỗi câu hỏi trong bảng hỏi phải được chuyển thành một hoặc nhiều biến trong phần mềm, với tên, nhãn, mã số và cấp độ đo lường rõ ràng. Bước này nghe đơn giản, nhưng sai sót ở đây sẽ đi theo bạn suốt quá trình phân tích: một mã giá trị thiếu không được khai báo có thể làm lệch giá trị trung bình, một tên biến đặt sai có thể làm lệnh cú pháp báo lỗi khó hiểu.

Bài viết này hướng dẫn quy trình gồm ba việc: lập bảng mã hóa, đặt tên biến đúng quy tắc và khai báo thuộc tính của biến trong Variable View hoặc bằng cú pháp. Ví dụ dùng bộ dữ liệu mẫu về ý định mua lại trên sàn X và toàn bộ ảnh là ảnh chụp thật từ PSPP 2.0 (Free Software Foundation, 2023). Cú pháp PSPP tương thích với SPSS nên thao tác trong SPSS giống hệt (GNU Project, n.d.; Field, 2024).

Dữ liệu mẫu. Dữ liệu và script dùng trong bài nằm ở thư mục 06-khai-bao-ma-hoa-bien-spss của kho dữ liệu mẫu trên GitHub. Muốn tải cả kho, bấm Code > Download ZIP rồi giải nén và giữ nguyên cấu trúc thư mục.

1. Lập bảng mã hóa trước khi nhập liệu

Bảng mã hóa (codebook) là tài liệu ghi lại cách mỗi câu hỏi được chuyển thành biến: tên biến, nội dung câu hỏi, các mã giá trị và ý nghĩa của từng mã, mã dùng cho giá trị thiếu và cấp độ đo lường. Pallant (2020) khuyên lập bảng mã hóa trước khi nhập dữ liệu, vì nó buộc bạn quyết định cách mã hóa một lần và áp dụng nhất quán cho mọi phiếu.

Một phần bảng mã hóa của bộ dữ liệu mẫu (Bảng 1):

Bảng 1. Một phần bảng mã hóa của bộ dữ liệu mẫu.

Tên biến Nội dung câu hỏi Mã giá trị Giá trị thiếu Measure
ID Mã phiếu Số thứ tự Nominal
SL1 Trong 6 tháng qua, bạn đã mua hàng trên sàn X chưa? 1 = Có, 2 = Chưa Nominal
GIOITINH Giới tính 1 = Nam, 2 = Nữ, 3 = Khác Nominal
TUOI Tuổi Số năm Để trống Scale
THUNHAP Thu nhập hằng tháng 1 = Dưới 10 triệu ... 4 = Từ 30 triệu trở lên 9 = Không muốn trả lời Ordinal
HL1 Tôi hài lòng với các lần mua hàng trên sàn X 1 = Hoàn toàn không đồng ý ... 5 = Hoàn toàn đồng ý Để trống Ordinal
NT4 Tôi lo ngại sàn X không giữ đúng cam kết (câu đảo chiều) Như HL1 Để trống Ordinal

Bảng mã hóa đầy đủ của bộ dữ liệu mẫu có trong file README.md đi kèm. Khi viết luận văn, bảng này thường được đưa vào phụ lục.

2. Mã hóa từng dạng câu hỏi

Mỗi dạng câu hỏi trong bảng hỏi được chuyển thành biến theo một cách riêng. Hình 1 tóm tắt bốn dạng thường gặp: câu một lựa chọn, câu Likert, câu hỏi số và câu nhiều lựa chọn.

Chuyển bốn dạng câu hỏi thành biến

Hình 1. Câu hỏi một lựa chọn, câu Likert và câu hỏi số đều tạo ra một biến; câu hỏi nhiều lựa chọn tạo ra nhiều biến.

  • Câu hỏi một lựa chọn (giới tính, nghề nghiệp): một biến, mỗi lựa chọn một mã số. Mã số chỉ để phân loại, nên đây là biến Nominal, hoặc Ordinal nếu các lựa chọn có thứ tự như nhóm thu nhập.
  • Câu hỏi nhiều lựa chọn ("chọn tất cả các nhóm hàng bạn thường mua"): mỗi lựa chọn là một biến riêng, mã 1 nếu người trả lời chọn và 0 nếu không chọn. Lỗi phổ biến là gộp các lựa chọn vào một biến duy nhất, vì như vậy không thể biết một người đã chọn những gì.
  • Câu Likert: mỗi câu là một biến. Hãy mã hóa thống nhất số lớn ứng với mức đồng ý cao, kể cả với câu đảo chiều. Câu đảo chiều được nhập đúng như người trả lời chọn, rồi mã hóa lại bằng lệnh Recode ở bài "Mã hóa lại biến và tính biến đại diện".
  • Câu hỏi số (tuổi, số lần mua): nhập đúng con số, không chia nhóm khi nhập. Nếu cần, bạn có thể chia nhóm sau, nhưng không thể làm ngược lại (xem bài "Các loại thang đo").

Hai nguyên tắc chung khi chọn mã:

  1. Mã cho giá trị thiếu phải nằm ngoài khoảng giá trị hợp lệ, ví dụ 9 cho thang 1–5 và 99 cho tuổi. Không dùng 0, vì 0 có thể là một giá trị hợp lệ (ví dụ "0 lần mua").
  2. Giữ nhất quán giữa các câu hỏi cùng loại. Nếu "Có" là 1 ở câu này thì cũng là 1 ở mọi câu khác.

3. Đặt tên biến đúng quy tắc

Tên biến là định danh dùng trong cú pháp và trong các phần mềm khác như AMOS, SmartPLS hay R. Tôi đã kiểm tra trực tiếp các quy tắc dưới đây trên PSPP 2.0; SPSS áp dụng cùng quy tắc (Bảng 2).

Bảng 2. Quy tắc đặt tên biến trong PSPP và SPSS.

Quy tắc Ví dụ hợp lệ Ví dụ không hợp lệ
Bắt đầu bằng chữ cái (hoặc @, #, $) HL1, TUOI 1HL
Không chứa khoảng trắng hay dấu gạch ngang HL_1 HL 1, HL-1
Tối đa 64 byte TANSUAT tên dài hơn 64 ký tự
Không trùng từ khóa dành riêng GIOITINH GT, TO, AND

13 từ khóa dành riêng không được dùng làm tên biến là: ALL, AND, BY, EQ, GE, GT, LE, LT, NE, NOT, OR, TO, WITH. Đây là các toán tử so sánh và từ nối trong cú pháp. Ví dụ, GT nghĩa là "lớn hơn" (greater than). Khi chuẩn bị bộ dữ liệu mẫu cho chuỗi bài, tôi ban đầu đặt tên biến giới tính là GT và PSPP báo lỗi ngay ở lệnh nhập dữ liệu với thông báo "Syntax error expecting identifier". Đây là lý do biến này có tên GIOITINH. Lỗi kiểu này rất khó đoán nguyên nhân nếu bạn không biết danh sách trên.

Ngoài các quy tắc bắt buộc, nên theo thêm ba thói quen:

  • Dùng chữ không dấu. PSPP chấp nhận tên có dấu như hài_lòng, nhưng nhiều phần mềm khác và các phiên bản cũ thì không.
  • Đặt tên theo khái niệm cộng số thứ tự câu hỏi, như HL1 đến HL4 cho thang đo sự hài lòng. Cách đặt này giúp dùng được từ khóa TO trong cú pháp: HL1 TO HL4 nghĩa là mọi biến từ HL1 đến HL4 theo thứ tự trong file.
  • Để nội dung đầy đủ ở nhãn biến (Label), không nhồi vào tên biến.

4. Khai báo thuộc tính biến trong Variable View

Chuyển sang thẻ Variable View. Mỗi dòng là một biến; bấm vào ô cần sửa để nhập, hoặc bấm đúp để mở hộp thoại với các thuộc tính có hộp thoại riêng.

Type: kiểu dữ liệu

Bấm đúp vào ô Type để mở hộp thoại Variable Type and Format (Hình 2).

Hộp thoại Variable Type and Format

Hình 2. Với dữ liệu khảo sát, gần như mọi biến đều là Numeric. Width là số chữ số tối đa, Decimal Places là số chữ số thập phân hiển thị.

Hãy để các biến khảo sát ở dạng Numeric, kể cả biến phân loại như giới tính: nhập mã số rồi gán nhãn giá trị, thay vì gõ chữ "Nam", "Nữ". Kiểu String (chuỗi ký tự) chỉ nên dùng cho câu hỏi mở, vì phần lớn thủ tục phân tích không nhận biến chuỗi.

Label: nhãn biến

Gõ trực tiếp nội dung câu hỏi vào ô Label. Nhãn biến hiển thị trong hộp thoại phân tích và trong bảng kết quả, nên giúp bảng kết quả dễ đọc hơn nhiều so với tên biến.

Value Labels: nhãn giá trị

Bấm đúp vào ô Value Labels để mở hộp thoại. Nhập mã vào ô Value, nội dung vào ô Value Label, rồi bấm Add. Lặp lại cho từng mã, cuối cùng bấm OK (Hình 3).

Thêm nhãn giá trị cho biến thu nhập

Hình 3. Thêm nhãn "Không muốn trả lời" cho mã 9 của biến thu nhập. Danh sách bên dưới là các nhãn đã có.

Muốn sửa một nhãn đã có, chọn nhãn đó trong danh sách, sửa nội dung rồi bấm Apply; muốn xóa, bấm Remove.

Missing Values: giá trị thiếu do người dùng quy định

PSPP và SPSS phân biệt hai loại giá trị thiếu:

  • System-missing: ô để trống. Phần mềm tự biết đây là giá trị thiếu.
  • User-missing: một mã số do bạn quy định, như 9 = "Không muốn trả lời". Phần mềm chỉ coi đây là giá trị thiếu nếu bạn khai báo ở cột Missing Values.

Bấm đúp vào ô Missing Values, chọn Discrete missing values và nhập mã, ví dụ 9. Bạn có thể khai báo tối đa ba mã riêng lẻ, hoặc một khoảng giá trị cộng thêm một mã (Hình 4).

Khai báo mã 9 là giá trị thiếu

Hình 4. Chọn Discrete missing values và nhập mã 9.

Quay lại Variable View, bạn sẽ thấy kết quả khai báo như Hình 5.

Variable View sau khi khai báo

Hình 5. Sau khi khai báo, dòng THUNHAP có nhãn giá trị mới ở cột Value Labels và mã 9 ở cột Missing Values (hai ô được đóng khung).

Vì sao bước này quan trọng? Tôi chạy một ví dụ trên bộ dữ liệu mẫu: giả sử 12 người chọn "Không muốn tiết lộ tuổi", được mã hóa là 99. Bảng 3 so sánh kết quả trước và sau khi khai báo 99 là giá trị thiếu. Phiếu có tuổi 230 do lỗi nhập liệu đã được tạm loại; lỗi này sẽ được xử lý ở bước làm sạch dữ liệu.

Bảng 3. Thống kê tuổi trước và sau khi khai báo mã 99 là giá trị thiếu.

N Tuổi trung bình Độ lệch chuẩn Tuổi lớn nhất
Chưa khai báo mã 99 299 34,33 16,54 99
Đã khai báo mã 99 287 31,63 10,12 60

Chỉ 12 phiếu với mã 99 đã làm tuổi trung bình tăng gần 3 tuổi và độ lệch chuẩn tăng hơn 60%. Kết quả tương tự với biến thu nhập: khi chưa khai báo, 12 phiếu "Không muốn trả lời" bị tính như một mức thu nhập và chiếm 4% trong bảng tần số; sau khi khai báo, các phiếu này được tách sang dòng Missing và cột Valid Percent được tính lại trên 288 phiếu có trả lời.

Measure: cấp độ đo lường

Chọn Nominal, Ordinal hoặc Scale ở cột Measure theo bảng mã hóa. Cách xác định cấp độ đo lường đã được trình bày ở bài "Các loại thang đo". Hai cột Columns (độ rộng cột hiển thị) và Align (căn lề) chỉ ảnh hưởng đến cách hiển thị, không ảnh hưởng đến phân tích.

Kiểm tra lại trong Data View

Quay lại Data View và bấm nút Value Labels trên thanh công cụ (biểu tượng hình nhãn), hoặc chọn View → Value Labels. Dữ liệu sẽ hiển thị bằng nhãn thay vì mã số (Hình 6).

Data View hiển thị mã số và nhãn giá trị

Hình 6. Cùng một dữ liệu, hiển thị bằng mã số (trên) và bằng nhãn giá trị (dưới) khi bật nút số 1. Nút này chỉ đổi cách hiển thị; dữ liệu lưu trong file vẫn là mã số.

Đây là cách kiểm tra nhanh xem nhãn giá trị đã khai báo đúng chưa: nếu một ô vẫn hiện số trong khi các ô khác hiện chữ, rất có thể mã đó chưa được gán nhãn hoặc bị nhập sai.

5. Khai báo bằng cú pháp

Với bảng hỏi có hàng chục câu, khai báo bằng cú pháp nhanh và ít sai hơn nhiều so với bấm từng ô. Cú pháp dưới đây chạy được trên cả PSPP và SPSS:

* Nhãn biến.
VARIABLE LABELS
  GIOITINH 'Giới tính'
  THUNHAP 'Thu nhập hằng tháng'
  HL1 'Tôi hài lòng với các lần mua hàng trên sàn X'.

* Nhãn giá trị: dùng TO cho các biến liền nhau có cùng nhãn.
VALUE LABELS
  GIOITINH 1 'Nam' 2 'Nữ' 3 'Khác'
  /THUNHAP 1 'Dưới 10 triệu' 2 'Từ 10 đến dưới 20 triệu'
           3 'Từ 20 đến dưới 30 triệu' 4 'Từ 30 triệu trở lên'
           9 'Không muốn trả lời'
  /XN1 TO YD4 1 'Hoàn toàn không đồng ý' 2 'Không đồng ý'
              3 'Trung lập' 4 'Đồng ý' 5 'Hoàn toàn đồng ý'.

* Giá trị thiếu do người dùng quy định.
MISSING VALUES THUNHAP (9).

* Cấp độ đo lường.
VARIABLE LEVEL
  GIOITINH NGHE (NOMINAL)
  /THUNHAP XN1 TO YD4 (ORDINAL)
  /TUOI TANSUAT (SCALE).

* Kiểm tra lại toàn bộ khai báo.
DISPLAY DICTIONARY.

Hai lưu ý khi dùng cú pháp:

  • Lệnh VALUE LABELS thay thế toàn bộ nhãn cũ của biến. Nếu chỉ muốn thêm một nhãn mà giữ các nhãn cũ, dùng lệnh ADD VALUE LABELS.
  • Lệnh DISPLAY DICTIONARY in ra toàn bộ thông tin khai báo của các biến. Hãy chạy lệnh này sau khi khai báo để rà soát lần cuối.

File cú pháp nhap_du_lieu.sps đi kèm bộ dữ liệu mẫu là một ví dụ hoàn chỉnh: nó nhập dữ liệu từ file CSV, khai báo toàn bộ 28 biến và lưu thành file .sav. Khi chạy file cú pháp có tiếng Việt bằng dòng lệnh, thêm tùy chọn --syntax-encoding=UTF-8 để nhãn tiếng Việt không bị lỗi font.

Năm lỗi thường gặp

Những lỗi dưới đây thường chỉ lộ ra khi bắt đầu phân tích, lúc sửa lại đã tốn nhiều công.

  1. Nhập dữ liệu trước khi lập bảng mã hóa, dẫn đến cùng một câu trả lời được mã hóa khác nhau ở các phiếu.
  2. Gộp câu hỏi nhiều lựa chọn vào một biến. Mỗi lựa chọn phải là một biến 0/1.
  3. Dùng mã cho giá trị thiếu nhưng không khai báo ở Missing Values. Như ví dụ trên, chỉ vài phiếu cũng đủ làm lệch kết quả.
  4. Đặt tên biến trùng từ khóa dành riêng, như GT, BY, TO, gây lỗi cú pháp khó hiểu.
  5. Nhập chữ thay vì mã số cho biến phân loại, khiến biến trở thành kiểu String và không dùng được trong phần lớn phân tích.

Tài liệu tham khảo

Field, A. (2024). Discovering statistics using IBM SPSS Statistics (6th ed.). SAGE Publications. https://collegepublishing.sagepub.com/products/discovering-statistics-using-ibm-spss-statistics-6-285130

Free Software Foundation. (2023). GNU PSPP (Version 2.0.0) [Computer software]. https://www.gnu.org/software/pspp/

GNU Project. (n.d.). GNU PSPP manual. Retrieved October 29, 2026, from https://www.gnu.org/software/pspp/manual/

Pallant, J. (2020). SPSS survival manual: A step by step guide to data analysis using IBM SPSS (7th ed.). Routledge. https://doi.org/10.4324/9781003117452

Enjoyed this article?

Share it with your network