Lệnh recode
giúp ta mã hoá lại các giá trị của biến theo những điều kiện được đưa ra. Giá
trị nào không phù hợp với biểu thức điều kiện sẽ không bị thay đổi, ngoại trừ
phù hợp với những điều kiện kèm theo.
Câu lệnh như
sau:
recode danh sách biến (biểu
thức điều kiện) [biểu thức điều kiện] [if] [in] [, tuỳ chọn]
Các biểu thức điều kiện phổ biển là:
# = # 1
= 2 1 mã hoá
thành 2
# # = # 1
2 = 2 1 và 2 mã
hoá thành 2
#/# = # 1/3
= 2 1 đến 3 mã
hoá thành 2
Nonmissing = # nonmiss
= 1 các giá trị không
phải missing mã hoá thành 1
Missing = # miss
= 2 tất cả missing
mã hoá thành 2
Else = # else=2 những giá trị còn
lại mã hoá thành 2
Lưu ý: với 3 nguyên tắc cuối, phải được sử dụng như là
1 rule cuối cùng trong 1 dãy rule. Else bao hàm cả nonmiss và missing.
Options bao gồm:
Generate (newvar)
Into
(newvar)
|
tạo biến newvar chứa các giá trị của
biến được mã hoá. Các giá trị nằm ngoài khoảng điều kiện của lệnh If hoặc in
sẽ được mã hoá thành missing, ngoài trừ trường hợp sử dụng tuỳ chọn copy.
Nếu không thực thi lệnh gen hoặc into,
câu lệnh sẽ ghi đè lên biến đó.
|
prefix(str)
|
tạo biến mới với tiền tố Str.
|
label(name)
|
tạo label value cho biến được mã hoá.
Tuỳ chọn này chỉ được thực hiện cùng vớ tuỳ chọn gen (into) và pre. Khi sử
dụng lệnh này, tên label var của biến được mã hoá sẽ được sử dụng làm tên
nhãn biến cho biến mới được tạo ra.
|
copyrest
|
Sao chép những giá trị không nằm trong
khoảng điều kiện từ biến cũ sang biến mới. Thường được sử dụng cùng với lệnh
if hoặc in.
|
test
|
kiểm tra các quy tắc được sử dụng nhưng
không thực thi câu lệnh
|
Ví dụ:
Sử dụng bộ số liệu sau:
. webuse
recxmpl
. list
+------------------+
| x
x1 x2 x3 |
|------------------|
1. | 1
2 1 8 |
2. | 2
1 2 1 |
3. | 3
2 1 2 |
4. | 4
3 2 1 |
5. | 5
4 3 2 |
|------------------|
6. | 6
5 4 3 |
7. | 7
6 5 4 |
8. | 8
7 6 5 |
9. | 1
8 7 6 |
10. | 2
1 8 7 |
+------------------+
Với biến x, mã hoá lại 1 thành 2, không thay đổi các
biến khác và lưu lại với tên biến mới là nx
. recode x 1=2, gen(nx)
. recode x 1=2, gen(nx)
(2 differences between x and
nx)
Kiểm tra kết quả
. list x nx
. list x nx
+--------+
| x
nx |
|--------|
1. | 1
2 |
2. | 2
2 |
3. | 3
3 |
4. | 4
4 |
5. | 5
5 |
|--------|
6. | 6
6 |
7. | 7
7 |
8. | 8
8 |
9. | 1
2 |
10. | 2
2 |
+--------+
Mã hoá biến x1 như sau: 1 thành 2, 2 thành 1và tạo 1
biến mới với tên nx1
. recode x1 (1=2) (2=1), gen(nx1)
. recode x1 (1 = 2) (2 = 1),
gen(nx1)
(4 differences between x1
and nx1)
. list x1 nx1
. list x1 nx1
+----------+
| x1
nx1 |
|----------|
1. |
2 1 |
2. |
1 2 |
3. |
2 1 |
4. |
3 3 |
5. |
4 4 |
|----------|
6. |
5 5 |
7. |
6 6 |
8. |
7 7 |
9. |
8 8 |
10. |
1 2 |
+----------+
Với biến x2, mã hoá 1 và 2 thành 1, 3 thành 2, 4 đến 7
thành 3, lưu kết quả vào biến mới nx2
. recode x2 (1 2 = 1) (3 = 2) (4/7 = 3), gen(nx2)
. recode x2 (1 2 = 1) (3 =
2) (4/7 = 3), gen(nx2)
(7 differences between x2
and nx2)
. list x2 nx2
+----------+
| x2
nx2 |
|----------|
1.
| 1
1 |
2. |
2 1 |
3. |
1 1 |
4. |
2 1 |
5. |
3 2 |
|----------|
6. |
4 3 |
7. |
5 3 |
8. |
6 3 |
9. |
7 3 |
10. |
8 8 |
+----------+
Ta mã hoá các giá trị của biến x1, x2, x3 như sau: 1
đến 3 thành 1, 4 đến 6 thành 2, còn lại mã hoá thành 3.
. recode x1-x3 (1/3=1) (4/6=2) (else=3), pre(new) test
Hoặc
. recode x1-x3 (min/3=1) (4/6=2) (7/max=3), pre(new) test
. recode x1-x3 (1/3=1)
(4/6=2) (else=3), pre(new) test
(8 differences between x1
and newx1)
(8 differences between x2
and newx2)
(8 differences between x3
and newx3)
. recode x1-x3 (min/3=1)
(4/6=2) (7/max=3), pre(new) test
(8 differences between x1
and newx1)
(8 differences between x2
and newx2)
(8 differences between x3
and newx3)
Ta sẽ mã hoá biến giá trị 5 6 của biến x2 thành
missing. Câu lệnh như sau:
. recode x2 1/4 =. , gen(mx)
Hoặc
. gen mx = x2
. replace mx =. if inrange(x2,
1,4)
Bây giờ, chúng ta sẽ mã hoá lại các giá trị lớn hơn 4
của biến x thành missing với những trường hợp newx = 2, lưu kết quả với tên
biến gn
. recode x (5/max=.) if
newx1>1, gen(gn)
. list x newx1 gn
+----------------+
| x
newx1 gn |
|----------------|
1. | 1
1 . |
2. | 2
1 . |
3. | 3
1 . |
4. | 4
1 . |
5. | 5
2 . |
|----------------|
6. | 6
2 . |
7. | 7
2 . |
8. | 8
3 . |
9. | 1
3 1 |
10. | 2
1 . |
+----------------+
Bạn sẽ thấy bất ngờ vì biến gn chỉ có 1 giá trị. Hãy
xem lại điều kiện của lệnh IF kèm theo, trước hết, điều kiện của chúng ta đưa
ra là chỉ mã hoá với các trường hợp có newx1 > 1. Những trường hợp nào không
thoả mãn điều kiện trên sẽ được mã hoá mặc định thành missing. Đối với những
trường hợp thoả mãn điều kiện trên, những trường hợp nào có x nằm trong khoảng
5 đến 8 (max) sẽ được mã hoá thành missing, những trường hợp nào không nằm
trong khoảng trên sẽ được giữ nguyên giá trị tại biến gn.
Để dễ dàng hơn trong việc hiểu điều này, ta sử lại câu
lệnh trên như sau:
. recode x (5/max=.a) if
newx1>1, gen(gn1)
Chú ý: các
chữ cái nằm sau ký hiệu “.” điều được hiểu là missing.
. list x newx1 gn gn1
+----------------------+
| x
newx1 gn gn1 |
|----------------------|
1. | 1
1 . . |
2. | 2
1 . . |
3. | 3
1 . . |
4. | 4
1 . . |
5. | 5
2 . .a |
|----------------------|
6. | 6
2 . .a |
7. | 7
2 . .a |
8. | 8
3 . .a |
9. | 1
3 1 1 |
10. | 2
1 . . |
+----------------------+
Nhưng ta chỉ muốn thay đổi các giá trị của biến x thoả
mãn điều kiện đã đưa ra như trên mà không muốn có thêm missing, giải quyết vấn
đề này, ta thêm lệnh copy vào cuối câu lệnh recode. Lệnh copy sẽ copy các biến
không thoả mãn điều kiện của lệnh IF vào biến mới, và kết quả như sau:
. recode x (5/max=.a) if
newx1>1, gen(gn2) copy
. list x newx1 gn gn1 gn2
+----------------------------+
| x
newx1 gn gn1
gn2 |
|----------------------------|
1. | 1
1 . .
1 |
2. | 2
1 . .
2 |
3. | 3
1 . .
3 |
4. | 4
1 . .
4 |
5. | 5
2 . .a
.a |
|----------------------------|
6. | 6
2 . .a
.a |
7. | 7
2 . .a
.a |
8. | 8
3 . .a
.a |
9. | 1
3 1 1
1 |
10. | 2
1 . .
2 |
+----------------------------+
Sử dụng bộ số liệu
sau
. webuse fullauto,
clear
Với biến rep77 và
rep78, mã hoá 1 và 2 thành 1, 3 thành 2, 4 và 5 thành 3, lưu biến mới với tên
newrep77 và newrep78, đồng thời gán nhãn giá trị cho biến như sau: 1 dưới mức
trung bình, 2 trung binh và 3 trên mức trung bình.
. recode rep77 rep78 (1 2 = 1 "duoi trung
binh") (3 = 2 "trung binh") (4 5 = 3 "tren trung
binh"), gen(nrep77 nrep78) label (nrep)
. label list nrep
Tài Liệu Tham Khảo
1. http://www.stata.com/help.cgi?recode
2. STATA DATA-MANAGEMENT REFERENCE MANUAL RELEASE 12
1. http://www.stata.com/help.cgi?recode
2. STATA DATA-MANAGEMENT REFERENCE MANUAL RELEASE 12
Nhận xét