Category Archives: Stata

Chuyển dạng số liệu từ số liệu dài thành số liệu rộng, long->wide

Số liệu từ dài sang rộng được minh họa như bên dưới
 

Phần này minh họa sức mạnh và sự đơn giản của Stata trong khả năng định hình lại các file dữ liệu. Những ví dụ này lấy các file số liệu dài và định hình lại chúng thành dạng rộng. Hình minh họa như trên.

Ví dụ 1: reshape 1 biến

Bạn nhập cách lệnh sau vào Stata để tạo bộ số liệu dọc nhé

clear
input famid birth age
1 1 9
1 2 6
1 3 3
2 1 8
2 2 6
2 3 2
3 1 6
3 2 4
3 3 2
end
list

 

Gõ lệnh sau để tạo số liệu ngang

reshape wide age, i ( famid) j (birth)
 

Ví dụ 2: reshape nhiều biến

Bạn nhập cách lệnh sau vào Stata để tạo bộ số liệu nhé

clear
input famid kidname birth age wt sex
1 Beth 1 9 60 f
1 Bob 2 6 40 m
1 Barb 3 3 20 f
2 Andy 1 8 80 m
2 Al 2 6 50 m
2 Ann 3 2 20 f
3 Pete 1 6 60 m
3 Pam 2 4 40 f
3 Phil 3 2 20 m
end
list


Giờ ta sẽ chuyển dữ liệu long về wide như sau
reshape wide kidname age wt sex, i(famid ) j(birth)
list

Và đây là kết quả
 

Ví dụ 3: mã hóa với hậu tố là chuỗi

Nhập lệnh sau để có được số liệu thu nhập của cha và mẹ
clear
input famid str4 name inc str4 dadmom
2 Art 22000 dad
1 Bill 30000 dad
3 Paul 25000 dad
1 Bess 15000 mom
3 Pat 50000 mom
2 Amy 18000 mom
end
list

 

Nhập lệnh sau nhé:

reshape wide name inc, i(famid) j(dadmom) string

Và đây là kết quả

Bạn cứ trao đổi thêm với nhóm ở đây, hoặc comment bên dưới nhé.

Liên hệ nhóm thạc sĩ Hỗ trợ Stata.

– SMS, Zalo, Viber:

phone number

– Facebook  facebook.com/hotroStata

Email  hotrostata@gmail.com

Chuyển dạng số liệu từ số liệu rộng thành số liệu dài, wide->long trong Stata

Phần này minh họa sức mạnh (và sự đơn giản) của Stata trong khả năng định hình lại các file dữ liệu. Những ví dụ này lấy các file số liệu rộng và định hình lại chúng thành dạng số liệu dài.

Trước mắt cần hiểu số liệu rộng wide là gì? Số liệu dài long là gì? Như ví dụ hình dưới, số liệu rộng là số liệu thu nhập income các năm khác nhau là các biến khác nhau, còn số liệu dài là số liệu thu nhập income các năm khác nhau là các dòng khác nhau.

Định hình lại dữ liệu từ rộng thành dài

Ví dụ 1(i có một tham số)

Hãy nhập dữ liệu thu nhập của gia đình bên dưới theo câu lệnh
clear
input famid faminc96 faminc97 faminc98
3 75000 76000 77000
1 40000 40500 41000
2 45000 45400 45800
end

 

Đây là thu nhập của hộ gia đình ở 3 năm 1996, 1997, 1998
Bây giờ sẽ chuyển dữ liệu lại, giá trị năm không nằm ở hàng ngang nữa mà nằm dạng cột dọc như ví dụ sau, vậy ta cần làm gì?
 

Các bạn gõ lệnh sau là bộ số liệu sẽ ra kết quả như mong muốn
reshape long faminc , i(famid) j(year)
Muốn quay lại như cũ bạn chỉ cần gõ lệnh
reshape wide

Ví dụ 2 (i có hai tham số)

Ta nhập số liệu như sau để có số liệu
clear
input famid birth ht1 ht2
1 1 2.8 3.4
1 2 2.9 3.8
1 3 2.2 2.9
2 1 2 3.2
2 2 1.8 2.8
2 3 1.9 2.4
3 1 2.2 3.3
3 2 2.3 3.4
3 3 2.1 2.9
end

 

Ta có số liệu về chiều cao lúc 1 tuổi và chiều cao lúc 2 tuổi của các trẻ em, giờ ta sẽ chuyển về số liệu dọc long nhé
reshape long ht,i(famid birth) j(age)
Lưu ý là tham số của i phải là khóa chính, nghĩa là không được trùng, nên ở đây cần kết hợp hai giá trị famid và birth để tạo thành giá trị của i.
Kết quả như sau:
 

Ví dụ 3(i có hai tham số và mã hóa cho 2 biến luôn)

Ta nhập số liệu như sau để có số liệu
clear
input famid birth ht1 ht2 wt1 wt2
 1 1 2.8 3.4 19 28
 1 2 2.9 3.8 21 28
 1 3 2.2 2.9 20 23
 2 1 2 3.2 25 30
 2 2 1.8 2.8 20 33
 2 3 1.9 2.4 22 33
 3 1 2.2 3.3 22 28
 3 2 2.3 3.4 20 30
 3 3 2.1 2.9 22 31
end

Ở đây số liệu tương tự ví dụ 2, và có thêm giá trị cân nặng lúc 1 tuổi và 2 tuổi. Bây giờ ta sẽ dùng lệnh sau để chuyển thành dữ liệu dọc long nhé.
reshape long ht wt, i ( famid birth) j ( age)
Kết quả như sau:
 

Ví dụ 4: hậu tố là chữ, không phải số

Các ví dụ ở trên thì các hậu tố đều là số, ví dụ 1 tuổi 2 tuổi, còn nếu là chữ thì ví dụ này sẽ xử lý như sau:
 

Ví dụ này là có tên cha tên mẹ, tiền lương của cha và tiền lương của mẹ.
clear
input famid str4 ten_cha tien_cha str4 ten_me tien_me
1 Bill 30000 Bess 15000
2 Art 22000 Amy 18000
3 Paul 25000 Pat 50000
end
list
reshape long ten_ tien_, i( famid) j(chame) string
list

Tóm lại cú pháp lệnh reshape long như sau

reshape long stem-of-wide-vars, i(wide-id-var) j(var-for-suffix)

  • stem-of-wide-vars: là gốc của các biến rộng, ví dụ: faminc
  • wide-id-var là biến xác định tính duy nhất của số liệu, ví dụ famid
  • var-for-suffix là biến sẽ chứa hậu tố của các biến số rộng, ví dụ: năm

 

Cách ghép nối file dữ liệu Stata bằng lệnh merge và append

Bạn có nhiều bộ số liệu, với các cột giống nhau cần gom lại. Hoặc là bạn có nhiều bộ số liệu, tuy các cột không giống nhau hoàn toàn nhưng các cột đó có quan hệ với nhau và cần gom lại, thì bài này là giải pháp dành cho bạn với 2 lệnh cực kì mạnh để xử lý kết nối file là mergeappend.

Lệnh merge thì thường dùng để kết nối file theo chiều ngang( nghĩa là thêm cột,ví dụ 2 bộ số liệu, mỗi bộ có 3 biến, thì bộ số liệu cuối cùng có thể có 4-5-6 biến), còn lệnh append thì thường dùng để ghép nối file theo chiều dọc( nghĩa là 2 bộ số liệu mỗi bộ có 100 quan sát, bộ số liệu cuối cùng có thể có 200 quan sát).
Stata chỉ có thể hiển thị một tập dữ liệu tại một thời điểm. Tập dữ liệu đang được hiển thị, đang được sử dụng, được gọi là dữ liệu chủ master. Bộ dữ liệu bạn muốn nối vào được gọi là dữ liệu using. Lệnh append ghép nối file dữ liệu dựa trên tên biến và lệnh merge ghép nối file dữ liệu dựa trên giá trị của biến.
Khi bạn có hai file dữ liệu, bạn có thể muốn kết hợp chúng bằng cách xếp chồng chúng lên nhau.

Ví dụ lệnh append

Bây giờ sẽ là ví dụ minh họa. Ta sẽ tạo 2 bộ số liệu sau đó sẽ ghép lại với nhau theo chiều dọc nhé( dùng lệnh append)
Lệnh sau dùng tạo file số liệu chứa mã hộ và tên cha
input famid str4 name inc
2 "Art" 22000
1 "Bill" 30000
3 "Paul" 25000
end
save dads, replace
list

 

Lệnh sau dùng tạo file số liệu chứa mã hộ và tên mẹ
clear
input famid str4 name inc
1 "Bess" 15000
3 "Pat" 50000
2 "Amy" 18000
end
save moms, replace
list

 

2 bộ số liệu mỗi bộ có 3 dòng, giờ sẽ gộp lại thành 1 bộ có 6 dòng nhé
use dads, clear
append using moms

 

Như vậy 3 dòng số liệu màu đỏ là của bộ số liệu dads, 3 dòng màu xanh là của bộ số liệu moms, tất cả đã được Stata gom lại thành 1 file duy nhất, bây giờ bạn có thể lưu lại thành file mới sau khi sử dụng lệnh append rồi nhé.

Ví dụ lệnh merge

Ghép file dạng 1:1

Bây giờ tạo một file mới chứa thu nhập của hộ gia đình:
clear
input famid faminc96 faminc97 faminc98
3 75000 76000 77000
1 40000 40500 41000
2 45000 45400 45800
end
save faminc, replace
list

 

Giờ ta sẽ dùng lệnh merge để thêm các thông tin về thu nhập của hộ gia đình vào file dads ở ví dụ trên nhé.
clear
use dads
merge 1:1 famid using faminc.dta
list

 
Như vậy các cột màu đỏ đã được thêm vào bộ số liệu, với khóa ở đây là mã số của hộ gia đình famid
Lệnh merge 1:1, có nghĩa là ghép vào dạng đơn giản, còn dưới dây là dạng phức tạp hơn, bây giờ file dads sẽ được ghép vào với file con cái.

Ghép file dạng 1:nhiều

Trước tiên ta tạo file danh sách các con nhé
clear
input famid str4 kidname birth age wt str1 sex
1 "Beth" 1 9 60 "f"
2 "Andy" 1 8 40 "m"
3 "Pete" 1 6 20 "f"
1 "Bob" 2 6 80 "m"
1 "Barb" 3 3 50 "m"
2 "Al" 2 6 20 "f"
2 "Ann" 3 2 60 "m"
3 "Pam" 2 4 40 "f"
3 "Phil" 3 2 20 "m"
end
save kids3

 

Sau đó ta ghép các con này vào danh sách các người cha lúc nãy
clear
use dads
merge 1:m famid using kids3
list

 

Các cột màu đỏ chính là danh sách các con của các ông bố này nhé. Như vậy bộ số liệu stata đã được ghép theo dạng 1:m, nói cách khác là 1:nhiều, nghĩa là một gia đình, 1 ông bố có nhiều đứa con.

Ghép file dạng nhiều:1

Bây giờ ta làm việc tương tự, nhưng ta sẽ chọn file chủ là file kids, file được chọn thêm là file dads. Vì một ông bố có nhiều con nên cú pháp sẽ là như sau:
clear
use kids3
merge m:1 famid using dads
list

 

Cột đỏ chính là các thông tin về cha của đứa trẻ các bạn nhé.

Bạn cứ trao đổi thêm với nhóm ở đây, hoặc comment bên dưới nhé.

Liên hệ nhóm thạc sĩ Hỗ trợ Stata.

– SMS, Zalo, Viber:

phone number

– Facebook  facebook.com/hotroStata

Email  hotrostata@gmail.com

Lệnh foreach để thực hiện các vòng lặp dữ liệu trên Stata

Nhóm ThS Bách Khoa minh họa:

  • Cách tạo và mã hóa lại các biến theo cách thủ công.
  • Cách sử dụng lệnh foreach để dễ dàng quá trình tạo và mã hóa các biến.
  • Sử dụng lệnh foreach để so sánh giữa các biến

Hãy xem xét chương trình mẫu dưới đây, chương trình này đọc dữ liệu thu nhập trong mười hai tháng.
input famid inc1-inc12
1 3281 3413 3114 2500 2700 3500 3114 3319 3514 1282 2434 2818
2 4042 3084 3108 3150 3800 3100 1531 2914 3819 4124 4274 4471
3 6015 6123 6113 6100 6100 6200 6186 6132 3123 4231 6039 6215

end
list

 

Cách tạo và mã hóa lại các biến theo cách thủ công.

Bây giờ sử dụng cách tính toán các biến thủ công để tính toán thuế cho từng tháng
Giả sử chúng tôi muốn tính số tiền thuế (10%) phải trả cho mỗi tháng, cách đơn giản nhất để làm điều này là tính 12 biến (taxinc1-taxinc12) bằng cách nhân mỗi biến trong số (inc1-inc12) với 10% như minh họa phía dưới. Như bạn thấy, điều này yêu cầu nhập lệnh tính thuế cho mỗi tháng dữ liệu (từ tháng 1 đến tháng 12) thông qua lệnh generate như sau:
generate taxinc1 = inc1 * .10
generate taxinc2 = inc2 * .10
generate taxinc3 = inc3 * .10
generate taxinc4 = inc4 * .10
generate taxinc5 = inc5 * .10
generate taxinc6 = inc6 * .10
generate taxinc7 = inc7 * .10
generate taxinc8 = inc8 * .10
generate taxinc9 = inc9 * .10
generate taxinc10= inc10 * .10
generate taxinc11= inc11 * .10
generate taxinc12= inc12 * .10

Có 12 biến mới đã được tạo ra giá trị bằng 10% của các biến gốc nhé
 

Tính toán các biến tự động sử dụng lệnh foreach

Một cách khác để tính toán 12 biến đại diện cho số thuế đã nộp (10%) cho mỗi tháng là sử dụng lệnh foreach. Trong ví dụ dưới đây, chúng tôi sử dụng lệnh foreach để chạy vòng lặp qua các biến inc1 đến inc12 và tính thu nhập chịu thuế là thueinc1 – taxinc12.
foreach var of varlist inc1-inc12{
 generate thue`var'=`var'*.10
 }

Có 12 biến mới đã được tạo ra giá trị bằng 10% của các biến gốc nhé
 

Câu lệnh foreach ban đầu cho Stata biết rằng chúng ta muốn lặp qua các biến inc1 đến inc12. Lần đầu tiên chúng ta duyệt qua các câu lệnh, giá trị của var sẽ là inc1 và lần thứ hai giá trị của var sẽ là inc2 và cứ tiếp tục như vậy cho đến lần lặp cuối cùng trong đó giá trị của var sẽ là inc12. Mỗi câu lệnh trong vòng lặp (trong trường hợp này, chỉ một câu lệnh tạo) được đánh giá và thực thi. Khi chúng ta ở bên trong vòng lặp foreach, chúng ta có thể truy cập giá trị của var bằng cách đặt nó bằng dấu ngoặc kép như thế này là `var '. Dấu `là ngay bên dưới dấu ~ trên bàn phím của bạn và dấu ' là bên dưới dấu " trên bàn phím của bạn. Lần đầu tiên qua vòng lặp, `var 'được thay thế bằng inc1, vì vậy câu lệnh
generate thue`var' = `var' * .10
trở thành
generate thueinc1 = inc1 * .10
Điều này được lặp lại cho inc2 và sau đó inc3 và như vậy cho đến inc12. Vì vậy, vòng lặp foreach này tương đương với việc thực hiện 12 câu lệnh tạo theo cách thủ công, nhưng dễ dàng hơn và ít bị lỗi hơn nhiều.

Thêm một ví dụ khác:

Bây giờ sẽ tính tổng thu nhập theo từng quý, cách làm thủ công như sau:
generate incqtr1 = inc1 + inc2 + inc3
generate incqtr2 = inc4 + inc5 + inc6
generate incqtr3 = inc7 + inc8 + inc9
generate incqtr4 = inc10+ inc11+ inc12
list incqtr1 – incqtr4

Cách làm tự động như sau
foreach qtr of numlist 1/4 {
 local m3 = `qtr'*3
 local m2 = (`qtr'*3)-1
 local m1 = (`qtr'*3)-2
 generate incqtr`qtr' = inc`m1' + inc`m2' + inc`m3'
}
list incqtr1 – incqtr4

Ý nghĩa lệnh này: sẽ lặp biến qtr từ 1 đến 4 , trong mỗi vòng lặp đó thì tính tổng thu nhập của quý đó.
Trong ví dụ này, chỉ với 4 quý dữ liệu, có lẽ sẽ dễ dàng hơn nếu bạn chỉ cần viết ra 4 câu lệnh tạo theo cách thủ công, tuy nhiên nếu bạn có 40 quý dữ liệu, thì vòng lặp foreach có thể giúp bạn tiết kiệm đáng kể thời gian, công sức và những sai lầm.

Sử dụng lệnh foreach để so sánh giữa các biến

Lệnh foreach cũng có thể được sử dụng để xác định các mối quan hệ trên các biến của tập dữ liệu. Ví dụ, giả sử một người cần biết tháng nào có thu nhập nhỏ hơn thu nhập của tháng trước. Để có được thông tin này, các biến giả có thể được tạo ra để cho biết điều này xảy ra vào những tháng nào. Khi một tháng có thu nhập nhỏ hơn thu nhập của tháng trước, các chỉ số giả lowinc2-lowinc12 sẽ được gán "1". Khi trường hợp này không xảy ra, chúng được gán "0". Chương trình này được minh họa bên dưới (lưu ý để đơn giản, chúng tôi giả sử dữ liệu về thu nhập không bị missing thiếu).
foreach curmon of numlist 2/12 {
 local lastmon = `curmon' – 1
 generate lowinc`curmon' = 1 if ( inc`curmon' < inc`lastmon' )
 replace lowinc`curmon' = 0 if ( inc`curmon' >= inc`lastmon' )
}

 
Do đó lệnh này rất hữu ích, tưởng tượng không phải là 12 tháng mà là 120 tháng thì viết câu lệnh thủ công sẽ cực biết nhường nào.

Tóm lại, lệnh foreach rất hữu ích khi bạn cần thực hiện các vòng lặp, qua một số lượng biến quan sát nhiều, chỉ cần đầu tư viết vài dòng lệnh thì hiệu quả đạt được chắc chắn làm bạn hài lòng.

Bạn cứ trao đổi thêm với nhóm ở đây, hoặc comment bên dưới nhé.

Liên hệ nhóm thạc sĩ Hỗ trợ Stata.

– SMS, Zalo, Viber:

phone number

– Facebook  facebook.com/hotroStata

Email  hotrostata@gmail.com

Thu gọn dữ liệu bằng lệnh collapse để tính trung bình, tổng, đếm số lượng các quan sát

Đôi khi bạn có các file dữ liệu, và file này cần được thu gọn để phục vụ cho một mục đích nào đó cho bạn. Ví dụ: bạn có thể có dữ liệu học sinh nhưng bạn thực sự muốn dữ liệu lớp học hoặc bạn có thể có dữ liệu hàng tuần nhưng bạn muốn dữ liệu hàng tháng, v.v.

Chúng ta sẽ minh họa điều này bằng cách sử dụng một ví dụ cho thấy cách bạn có thể thu gọn gộp dữ liệu các trẻ em để làm dữ liệu cấp gia đình.Đây là một file chứa thông tin về những đứa trẻ trong ba gia đình. Có một dòng số liệu cho mỗi đứa trẻ.Mỗi gia đình được đại diện bởi biến Family ID, viết tắt là famid. Biến birth là thứ tự được sinh ra trong gia đình sinh (số 1 là sinh trước, 2 là sinh kế tiếp…), age , wt,sex là tuổi, cân nặng và giới tính của đứa trẻ. Chúng ta sẽ sử dụng file này để hiển thị cách thu gọn dữ liệu qua các quan sát.
use https://phantichstata.com/data/kids, clear
 
Như vậy ta có 3 gia đình được định danh bởi famid.
Hãy xem xét lệnh collapse bên dưới. Nó thu gọn tất cả các quan sát để tạo ra một dòng duy nhất với độ tuổi trung bình của trẻ em.
collapse age
 
Từ 6 biến và 9 dòng dữ liệu, bây giờ chỉ còn 1 dòng và 1 biến. Số 5.11 chính là độ tuổi trung bình của 9 trẻ em này. Việc thu gọn ở trên không hữu ích lắm, nhưng bạn có thể kết hợp nó với tùy chọn by(famid), sau đó nó tạo 3 dòng số liệu cho mỗi gia đình chứa độ tuổi trung bình của trẻ em trong mỗi gia đình đó.
clear
use https://phantichstata.com/data/kids, clear
collapse age, by(famid)

 
Như vậy có vẻ hữu ích hơn, vì đã biết được tuổi trung bình trẻ em trong từng gia đình. Lệnh collapse bên dưới thực hiện tương tự như trên, ngoại trừ độ tuổi trung bình được đặt tên là avgage và chúng ta đã nói rõ ràng với lệnh collapse rằng chúng ta muốn nó tính giá trị trung bình.
use https://phantichstata.com/data/kids, clear
collapse (mean) avgage=age, by(famid)

list
 
Chúng ta có thể yêu cầu giá trị trung bình cho nhiều hơn một biến. Ở đây chúng ta lấy giá trị trung bình cho tuổi và cân nặng trong cùng một lệnh.
use https://phantichstata.com/data/kids, clear
collapse (mean) avgage=age avgwt=wt, by(famid)
list

 
Ngoài ra ta có thể tính luôn số con trong 1 gia đình bằng hàm count nhé
use https://phantichstata.com/data/kids, clear
collapse (mean) avgage=age avgwt=wt   (count) socon=age, by(famid)
list

 
Giả sử bạn muốn đếm số con trai và con gái trong gia đình. Chúng ta có thể làm điều đó với một bước bổ sung. Chúng ta sẽ tạo một biến giả là 1 nếu đứa trẻ là con trai (0 nếu không) và một biến giả là 1 nếu đứa trẻ là con gái (và 0 nếu không). Tổng của biến giả bé trai là số bé trai và tổng của biến giả bé gái là số bé gái.
Trước tiên tạo biến giả
use https://phantichstata.com/data/kids, clear
tabulate sex, generate(sexdum)

 
Như vậy có 2 biến dummy là sexdum1 và sexdum2 được tạo ra. Bây giờ sẽ tính tổng của mỗi biến trong mỗi gia đình
collapse (mean) avgage=age avgwt=wt (count) socon=age (sum) contrai=sexdum2 congai=sexdum1, by(famid)
list

 

Bạn cứ trao đổi thêm với nhóm ở đây, hoặc comment bên dưới nhé.

Liên hệ nhóm thạc sĩ Hỗ trợ Stata.

– SMS, Zalo, Viber:

phone number

– Facebook  facebook.com/hotroStata

Email  hotrostata@gmail.com

Cách giữ và loại biến, giữ và loại quan sát bằng lệnh keep, drop, use if trong Stata

Phần này cho thấy cách bạn có thể tạo ra dữ liệu con subsetting data trong Stata. Bạn có thể sử dụng tập hợp dữ liệu con bằng cách giữ lại hoặc loại bỏ các biến. Cũng như giữ lại, loại bỏ các quan sát. Bạn cũng có thể sử dụng dữ liệu con khi sử dụng file dữ liệu quá lớn để vừa với bộ nhớ trên máy tính của mình. Ví dụ: bộ số liệu gốc có 500 biến và 1000 quan sát. Bây giờ bạn có thể sử dụng 50 biến và 200 quan sát thôi, vì đó là các số liệu mình cần, không nhất thiết phải sử dụng hết file số liệu gốc. 3 phần chính trong bài như sau:

  • Giữ và loại bỏ các biến
  • Giữ và loại bỏ các quan sát
  • Giữ và loại bỏ các biến và quan sát đồng thời

Giữ và loại bỏ các biến

Đôi khi bạn không muốn tất cả các biến trong một file dữ liệu. Bạn có thể sử dụng các lệnh keep drop cho các biến.

Lệnh keep

Nếu chúng ta coi dữ liệu của bạn giống như một bảng tính excel, có nghĩa mỗi dòng là 1 quan sát, mỗi cột là một biến. Hãy minh họa điều này bằng file dữ liệu auto.
sysuse auto
Chúng ta có thể sử dụng lệnh describe để xem các biến của nó.
describe
 

Giả sử chúng ta muốn chỉ có make mpg và price, chúng ta có thể giữ lại các biến đó, như được hiển thị bên dưới.
keep make mpg price
describe
 

Hãy nhớ rằng điều này không thay đổi file trên đĩa mà chỉ thay đổi bản sao chúng ta có trong bộ nhớ. Nếu chúng ta lưu file này gọi nó là auto, điều đó có nghĩa là chúng ta sẽ thay thế file hiện có (với tất cả các biến) bằng file này chỉ có make, mpg và price. Trên thực tế, chúng ta sẽ mất vĩnh viễn tất cả các biến khác trong file dữ liệu. Điều quan trọng là phải cẩn thận khi sử dụng lệnh lưu sau khi bạn đã loại bỏ các biến và bạn nên lưu các file đó vào một file có tên mới, ví dụ: save auto2.

Lệnh drop

Đây là cách sử dụng lệnh drop để xóa các biến. Trước tiên, hãy xóa dữ liệu trong bộ nhớ và sử dụng file dữ liệu auto.
sysuse auto, clear
Bộ số liệu hiện có tất cả các biến sau: make price mpg rep78 headroom trunk weight length turn foreign
Bây giờ ta xóa hết chừa 2 biến make và price thôi nhé
drop mpg rep78 headroom trunk weight length turn displacement gear_ratio foreign
 

Giờ bạn nếu muốn lưu bộ số liệu này lại thì chỉ cần gõ lệnh save autonew

Giữ và loại bỏ các quan sát

Ở trên là xóa và giữ biến, còn phần này sẽ là xóa và giữ quan sát các bạn nhé. Xóa quan sát nghĩa là mình xóa các dòng số liệu, ví dụ bạn có 100 dòng thì xóa còn 40 dòng thôi
sysuse auto , clear
Biến rep78 có giá trị từ 1 đến 5, đồng thời cũng có giá trị bị thiếu missing value như sau
tab rep78, missing
 

Giờ ta muốn xóa các dòng missing thì dùng lệnh này
drop if missing(rep78)
Kết quả hiển thị
(5 observations deleted)
Chứng tỏ có 5 dòng missing đã bị xóa nhé
Giờ nghiên cứu lệnh keep if nhé. Lệnh này sẽ giữ lại những quan sát thỏa điều kiện, ngoài ra sẽ xóa sạch, nên bạn cẩn thận khi sử dụng lệnh này nhé
sysuse auto , clear
keep if (rep78 <= 3)

 

Ta thấy stata đã xóa các biến có rep78 >3,đồng thời xóa luôn giá trị missing value, do stata quy ước missing value là dương vô cực.

Giữ và loại bỏ các biến và quan sát đồng thời

Bây giờ nếu ta mở file chỉ lấy một số biến, đồng thời chỉ lấy một số quan sát thì làm như thế nào. Các bạn thử câu lệnh sau nhé
clear

use make rep78 using https://phantichstata.com/data/auto if rep78>2
Ý nghĩa: câu lệnh này tạo ra trong bộ nhớ 1 file số liệu chỉ có 2 biến là make và rep78, trong đó giá trị của rep78 đều lớn hơn 2
Vị trí của if using có thể đổi cho nhau nhé. Câu lệnh trên là tương đương với lệnh này:
clear

use make rep78 if rep78>2 using https://phantichstata.com/data/auto
Lưu ý lệnh sau đây sẽ báo lỗi
clear

use make if rep78>2 using https://phantichstata.com/data/auto

Lỗi:
(1978 Automobile Data)
rep78 not found
r(111);

Lý do là rep78 không phải là một trong những biến được đọc và giữ lại, vì vậy nó không thể được sử dụng trong phần if. Để sử dụng một biến trong phần if, nó phải là một trong những biến được sử dụng giữ lại.

Tổng kết:

Sử dụng keep/drop để giữ/xóa biến
keep make price mpg
drop displ gear_ratio

Sử dụng keep if/drop if để giữ/xóa quan sát theo điều kiện nào đó
drop if missing(rep78)
keep if (rep78 <= 3)

Giữ/xóa biến/quan sát với lệnh use

use make mpg price rep78 using https://phantichstata.com/data/auto
use https://phantichstata.com/data/auto if (rep78 <= 3)
use make mpg price rep78 using https://phantichstata.com/data/auto if (rep78 <= 3)

Bạn cứ trao đổi thêm với nhóm ở đây, hoặc comment bên dưới nhé.

Liên hệ nhóm thạc sĩ Hỗ trợ Stata.

– SMS, Zalo, Viber:

phone number

– Facebook  facebook.com/hotroStata

Email  hotrostata@gmail.com

Sử dụng lệnh generate replace recode để tạo biến, mã hóa biến trong Stata

Phần này chỉ ra cách tạo và mã hóa lại các biến. Trong Stata, bạn có thể tạo các biến mới bằng lệnh generate và bạn có thể sửa đổi các giá trị của một biến hiện có bằng lệnh replace hoặc recode. 3 phần chính sau sẽ được đề cập trong bài viết này:

  • Tính toán các biến mới bằng cách sử dụng generate replace
  • Mã hóa phân loại các biến mới bằng cách sử dụng generate replace
  • Mã hóa phân loại các biến bằng cách sử dụng recode

Tính toán các biến mới bằng cách sử dụng generate và replace

Hãy sử dụng file auto cho các ví dụ . Trong phần này, chúng ta sẽ xem cách tính toán các biến với lệnh generatereplace.
sysuse auto, clear
Biến length là chiều dài của xe tính bằng inch. Dưới đây là thống kê tóm tắt về chiều dài của xe.
 

Giờ muốn đổi chiều dài qua thành đơn vị mét thì tạo biến mới length_met như sau
generate length_met=length*0.0254
Lưu ý để tạo biến mới thì dùng lệnh generate
Còn để cập nhật giá trị cho biến đã có sẵn thì dùng lệnh replace
Ví dụ cập nhật giá trị cho biến được tạo lúc nãy thì làm như sau:
replace length_met=length*0.0254
summarize length length_met
 

Cú pháp của generatereplace giống hệt nhau, ngoại trừ: – generate hoạt động khi biến chưa tồn tại và sẽ báo lỗi nếu biến đã tồn tại. – replace hoạt động khi biến đã tồn tại và sẽ đưa ra lỗi nếu biến chưa tồn tại.
Giả sử chúng ta muốn tạo một biến có tên là length2 là độ dài bình phương.
generate length2=length^2
hoặc lấy Logarit tự nhiên (còn gọi là logarit Nêpe)
generate loglen = log(length)
Giờ sẽ tính trung bình cộng và độ lệch chuẩn của length, từ đó tính được điểm Z-scores của length.
summarize length length_met
 

Trung bình cộng là 187.93 và độ lệch chuẩn là 22.27, vậy biến zlength được tính như sau.
generate zlength = (length – 187.93) / 22.27
summarize zlength

 

 

Mã hóa phân loại các biến mới bằng cách sử dụng generate và replace

Giả sử rằng muốn chia biến mpg thành ba loại. Hãy xem bảng mpg hiện tại đang như thế nào nhé.
 

Ta dùng các câu lệnh sau để tạo biến mới và gán giá trị cho nó
generate mpg3 = .
replace mpg3 = 1 if (mpg <= 18)
replace mpg3 = 2 if (mpg >= 19) & (mpg <=23)
replace mpg3 = 3 if (mpg >= 24) & (mpg <.)
tab mpg3

 

Như vậy quãng đường đi được trên một đơn vị xăng đã được chia ra 3 loại. Từ đó ta có thể phân khúc được xe nào ít tốn xăng hơn theo thể loại xe nhập và xe nội
tab mpg3 foreign
 

 

Mã hóa phân loại các biến bằng cách sử dụng recode

Có một cách dễ dàng hơn để mã hóa lại biến mpg thành ba danh mục bằng cách sử dụng lệnh generate recode. Đầu tiên, chúng ta tạo một bản copy của mpg, gọi nó là mpg3a. Sau đó, chúng ta sử dụng recode để chuyển đổi mpg3a thành ba loại: nhỏ nhất đến 18 thành 1, 19-23 thành 2 và 24 đến lớn nhất thành 3.
generate mpg3a = mpg
recode mpg3a (min/18=1) (19/23=2) (24/max=3)

Giờ ta so sánh biến mpg3 và mpg3a xem có giống nhau không nhé
tab mpg3 mpg3a
 

Hai biến này xem như là một nhé, tuy dùng 2 cách khác nhau nhưng cùng ra kết quả
Ngoài ra, ta có thể sử dụng lệnh if nếu muốn recode một số đối tượng nào đó theo 1 chuẩn nào đó, ví dụ nhé
generate mpgfd = mpg
recode mpgfd (min/18=0) (19/max=1) if foreign==0
recode mpgfd (min/24=0) (25/max=1) if foreign==1

Ở đây có nghĩa là nếu xe nước ngoài thì ngưỡng chia recode khác, xe trong nước thì ngưỡng chia recode khác

Bạn cứ trao đổi thêm với nhóm ở đây, hoặc comment bên dưới nhé.

Liên hệ nhóm thạc sĩ Hỗ trợ Stata.

– SMS, Zalo, Viber:

phone number

– Facebook  facebook.com/hotroStata

Email  hotrostata@gmail.com

Gán nhãn label cho bộ số liệu Stata, cho biến, hoặc cho các giá trị bên trong biến

Phần này sẽ chỉ ra cách tạo nhãn cho dữ liệu của bạn. Stata cho phép bạn gắn nhãn file dữ liệu (nhãn dữ liệu), gắn nhãn các biến trong file dữ liệu (nhãn biến) và gắn nhãn giá trị cho các biến của bạn (nhãn giá trị).

Hãy sử dụng một file có tên autolab không có bất kỳ nhãn nào.
use https://phantichstata.com/data/autolab.dta, clear
Hãy sử dụng lệnh describe để xác minh rằng file này thực sự không có bất kỳ nhãn nào.
describe
 

 

Gán nhãn cho bộ số liệu

Hãy sử dụng lệnh label data để thêm nhãn mô tả file dữ liệu. Nhãn này có thể dài tối đa 80 ký tự.
label data "File này chứa dữ liệu xe hơi cho năm 1978"
Lệnh describe cho thấy rằng nhãn này đã được áp dụng cho phiên bản hiện có trong bộ nhớ.
describe
 

 

Gán nhãn cho các biến

Hãy sử dụng lệnh label variable để gán nhãn cho các biến rep78, price, mpg và foreign.
label variable rep78 "bản ghi sửa chữa từ năm 1978"
label variable price "giá xe năm 1978"
label variable mpg "Số dặm trên mỗi gallon của xe hơi "
label variable foreign "nguồn gốc của chiếc xe, nước ngoài hoặc trong nước"

Lệnh describe cho thấy các nhãn này đã được áp dụng cho các biến.
 

Gán nhãn giá trị cho các biến

Hãy tạo một nhãn giá trị foreignl để gắn nhãn các giá trị của biến foreign. Đây là một quy trình gồm hai bước, nơi đầu tiên bạn xác định nhãn, sau đó bạn gán nhãn cho biến. Lệnh nhãn xác định bên dưới tạo nhãn giá trị có tên là Foreignl liên kết 0 với ô tô trong nước và 1 với ô tô nước ngoài.
label define foreignl 0 "ô tô nội địa" 1 "ô tô nước ngoài"
Lệnh nhãn giá trị bên dưới liên kết biến foreign với foreignl.
label values foreign foreignl
Nếu chúng ta sử dụng lệnh describe, chúng ta có thể thấy rằng biến foreign có một nhãn giá trị gọi là foreignl được gán cho nó.
 

Giờ ta thống kê tần số tabulate cho biến foreign, kết quả sẽ hiển thị dạng chữ thay vì 0/1
 

Hoặc khi ta dùng kiểm định ttest để so sánh lượng xăng tiêu thụ của xe nhập và xe nội, kết quả cũng ra rõ ràng là ô tô nội địa và ô tô nước ngoài.
 
Một lưu ý rất quan trọng: Các nhãn này được gán cho dữ liệu hiện có trong bộ nhớ. Để thực hiện những thay đổi này vĩnh viễn, bạn cần lưu dữ liệu. Khi bạn lưu dữ liệu, tất cả các nhãn (nhãn dữ liệu, nhãn biến, nhãn giá trị) sẽ được lưu cùng với file dữ liệu. Bạn có thể vào menu File-Save As để lưu lại số liệu nhé.

Bạn cứ trao đổi thêm với nhóm ở đây, hoặc comment bên dưới nhé.

Liên hệ nhóm thạc sĩ Hỗ trợ Stata.

– SMS, Zalo, Viber:

phone number

– Facebook  facebook.com/hotroStata

Email  hotrostata@gmail.com

Các tham số biểu đồ thông dụng khi vẽ đồ thị với Stata

Phần này nhóm Thạc Sĩ Phân Tích Stata ví dụ về các loại đồ thị khác nhau có thể được tạo bằng lệnh graph twoway. Điều này được minh họa bằng cách hiển thị lệnh và biểu đồ kết quả. Các tham số biểu đồ thông dụng sẽ được giới thiệu. Cơ bản là:

  • Chỉnh sửa nội dung chữ, màu sắc, vị trí của tiêu đề.
  • Màu nền, màu viền tiêu đề.
  • Đồ thị gồm tiêu đề, phụ đề, caption,và note.
  • Chỉnh nội dung tiêu đề cột x và y.
  • Co dãn tỉ lệ các cột khác nhau.
  • Chỉnh màu bên trong bên ngoài đồ thị.

Tập dữ liệu được sử dụng trong các ví dụ này có thể được lấy bằng lệnh sau:
use https://phantichstata.com/data/hsb2, clear

Chỉnh sửa nội dung chữ, màu sắc, vị trí của tiêu đề

Dùng lệnh sau để vẽ
graph twoway scatter read write, title("Scatterplot of Reading and Writing" ,color(blue) position(11))
Giải thích tham số biểu đồ: màu của title xanh blue, và màu vị trí ở vị trí 11 giờ( bạn tưởng tượng có cái đồng hồ 12 chữ số áp lên màn hình nhé)
 

Nếu muốn tiêu đề nằm bên trong hình thì thêm tham số biểu đồ ring(0) nhé, ngoài ra để chỉnh kích thước tiêu đề nhỏ lại xài lệnh này size(small) như sau:
graph twoway scatter read write, title("Scatterplot of Reading and Writing", color(blue) position(11) ring(0) size(small) )
 

 

Màu nền, màu viền tiêu đề

Giờ muốn tô màu nền cho tiêu đề là vàng, và màu viền là màu đỏ thì làm như sau:
graph twoway scatter read write, title("Scatterplot of Reading and Writing", box blcolor(red) bcolor(yellow) )
 

Tiêu đề gồm 3 dòng, mỗi dòng cách nhau 9 đơn vị sử dụng tham số biểu đồ sau:
graph twoway scatter read write,title("line0" "line1" "line2", linegap(9))
 

 

Đồ thị gồm tiêu đề, phụ đề, caption,và note

Ta thêm tham số biểu đồ:
graph twoway scatter read write, ///
title("Scatterplot of Reading and Writing") ///
subtitle("200 sinh vien") ///
note(trung hoc hoac tren) ///
caption(phantichstata.com)

 

Ngoài ra còn có thể chỉnh kích cỡ và vị trí của note và caption
graph twoway scatter read write, ///
title("Scatterplot of Reading and Writing") ///
subtitle("200 sinh vien") ///
note(trung hoc hoac tren , size(medium) position(5)) ///
caption(phantichstata.com , size(medium) position(5))

 

Chỉnh nội dung tiêu đề cột x và y

Còn đây là cách chỉnh nội dung tiêu đề cột x và y nhé, bằng tham số biểu đồ xtitle, ytitle
twoway scatter read write, ///
ytitle(Điểm thi viết) ///
xtitle(Điểm thi đọc)

 

 

Co dãn tỉ lệ các cột khác nhau

Nếu muốn co dãn tỉ lệ các cột khác nhau thì thêm tham số biểu đồ ysize() xsize() như sau:
twoway scatter read write ,ysize(4) xsize(6)
 

Các tham số biểu đồ trong ysize() xsize() dao động từ 1 đến 20, đây đơn giản chỉ là tỉ lệ của cột x so với y, do đó cách viết sau cùng ra một kết quả với cách viết ở trên twoway scatter read write ,ysize(2) xsize(3), do tỉ lệ 4:6 thì giống với tỉ lệ 2:3
Muốn cho font chữ lớn gấp 2 thì thêm tham số biểu đồ scale(2) như sau
graph twoway scatter read write, scale(2)
 

 

Chỉnh màu bên trong bên ngoài đồ thị

Giờ chỉnh màu nhé, màu bên ngoài đồ thị màu đỏ, bên trong màu vàng thì làm như sau:
twoway scatter read write ,graphregion( color(red) ) plotregion( fcolor(yellow) )
 

Bạn cứ trao đổi thêm với nhóm ở đây, hoặc comment bên dưới nhé.

Liên hệ nhóm thạc sĩ Hỗ trợ Stata.

– SMS, Zalo, Viber:

phone number

– Facebook  facebook.com/hotroStata

Email  hotrostata@gmail.com

Cách vẽ biểu đồ phân tán twoway scatterplots, từ cơ bản đến nâng cao

Bài này hiển thị các ví dụ về kết hợp các biểu đồ phân tán twoway scatterplots. Điều này được minh họa bằng cách nhập các câu lệnh và hiển thị biểu đồ kết quả.
Tập dữ liệu được sử dụng trong các ví dụ này có thể được lấy bằng lệnh sau:
use https://phantichstata.com/data/hsb2, clear
Cụ thể kết hợp đồ thị trong các tình huống sau:

  • Biểu đồ hai chiều các ô khác nhau cho nhóm khác nhau(sử dụng “by”)
  • Kết hợp biểu đồ phân tán và biểu đồ tuyến tính trong một biểu đồ
  • Kết hợp nhiều biểu đồ riêng biệt vào 1 biểu đồ duy nhất bằng lệnh graph combine

Biểu đồ phân tán các ô khác nhau cho nhóm khác nhau

Biểu đồ khác nhau dựa vào giới tính:
twoway (scatter read write), by(female)

Biểu đồ khác nhau dựa vào giới tính và loại trường tư hoặc trường công:
twoway (scatter read write), by(female schtyp )

Thay vì hiện thị 2 cột, bây giờ bạn muốn hiển thị 3 cột thì làm như sau , thêm tham số cols(3) như sau
twoway (scatter read write), by(female schtyp , cols(3))
 

 

Kết hợp biểu đồ phân tán và biểu đồ tuyến tính trong một biểu đồ

Bạn hãy chạy lệnh sau:

twoway (scatter read write) (lfit read write) , ytitle(Điểm đọc reading)
 
Kết hợp biểu đồ phân tán và biểu đồ tuyến tính trong một biểu đồ, đồng thời kết hợp luôn giới tính và loại trường.
twoway (scatter read write) (lfit read write) , ytitle(Điểm đọc reading) by(female schtyp)
 
Biểu đồ tuyến tính với đầy đủ số liệu và bỏ đi một số quan sát nào đó
twoway (scatter read write) (lfit read write) (lfit read write if id <= 51) if id<=100, ytitle(Điểm đọc reading) legend(lab(3 "Fitted values cho 50 quan sát đầu tiên"))
Ý nghĩa lệnh này như sau:
1. Chỉ chạy cho 100 quan sát có id<=100: “if id<=100”
2. Đường tuyến tính fitted value thứ 2 chỉ áp dụng cho 50 quan sát đầu tiên: “lfit read write if id <= 51”
3. Mục thứ 3 trong phần chú thích bên dưới được gán nhãn bằng đoạn “legend(lab(3 "Fitted values cho 50 quan sát đầu tiên")”. Nếu muốn gãn nhãn cho mục số 2 thì sửa lại là lab(2)
 
Kết hợp biểu đồ phân tán với nhiều biến và biều đồ tuyến tính
Hiển thị điểm đọc và toán ở trục y, điểm viết ở trục x
twoway (scatter read write) (scatter math write)
 

Hiển thị điểm đọc và toán ở trục y, điểm viết ở trục x, đồng thời xây dựng 2 đường fitted line tuyến tính
twoway (scatter read write) (scatter math write) (lfit read write) (lfit math write)
 

Giờ muốn gán nhãn cho biểu đồ thì làm như sau:
twoway (scatter read write) (scatter math write) (lfit read write) (lfit math write) , legend (label(1 "1 điểm đọc") label(2 "2 điểm toán") label(3 "3 fitted value đọc") label(4 "4 fitted value toán") )
 

Để đảo thứ tự các nhãn, ta thêm tùy chọn legend(order(1 3 2 4)) như sau:
twoway (scatter read write) (scatter math write) (lfit read write) (lfit math write) , legend (label(1 "1 điểm đọc") label(2 "2 điểm toán") label(3 "3 fitted value đọc") label(4 "4 fitted value toán"))legend(order(1 3 2 4))
 

Biến giới tính là female, ta có thể chia điểm viết (biến write) thành write0 và write1 bằng lệnh sau, mục đích là tạo 2 biến điểm viết mới dựa theo giới tính. Như vậy người male sẽ có giá trị ở biến write0, female có giá trị ở biến write1
separate write, by(female)
 

twoway (scatter write0 read) (scatter write1 read)
Chạy lệnh trên để ra được biểu đồ kết hợp nam và nữ trong cùng 1 biểu đồ
 

Gán thêm fitted line cho cả nam và nữ nữa nhé
twoway (scatter write0 read) (scatter write1 read) (lfit write0 read) (lfit write1 read) ,legend(order(1 "Males" 2 "Females" 3 "Lfit Males" 4 "Lfit Females"))
 

Kết hợp nhiều biểu đồ vào 1 biểu đồ duy nhất bằng lệnh graph combine

Còn 1 tuyệt chiêu cuối cùng rất hay, đó là bạn có thể kết hợp rất nhiều biểu đồ vào 1 biểu đồ duy nhất. Lệnh sử dụng là “graph combine”
Bây giờ bạn sử dụng 4 lệnh sau để tạo 3 biểu đồ
twoway (scatter read write) (lfit read write), name(bieudo1)
regress read write
rvfplot, name(bieudo2)
lvr2plot, name(bieudo3)

Giờ sử dụng lệnh graph combine để kết hợp 3 biểu đồ đó với nhau thành 1 biểu đồ duy nhất nhé
graph combine bieudo1 bieudo2 bieudo3
 

Bạn cứ trao đổi thêm với nhóm ở đây, hoặc comment bên dưới nhé.

Liên hệ nhóm thạc sĩ Hỗ trợ Stata.

– SMS, Zalo, Viber:

phone number

– Facebook  facebook.com/hotroStata

Email  hotrostata@gmail.com