Category Archives: Stata

Tải phần mềm Stata 17 miễn phí, cài đặt dễ dàng

Nhóm Thạc Sĩ hướng dẫn  các bạn tải phần mềm Stata 17 phiên bản 64 bít, cài đặt dễ dàng

Các bạn tải phần mềm Stata miễn phí bảng 17 x64  ở  đây

https://mega.nz/file/BiRxkK7K#ZFQF73TstTSfQyD7uj1CqFdByXDq3Krh-LMHBnv53eQ


Sau đó giải nén ra, bấm vào file Setup.exe để chạy chương trình. Cứ thế nhấn next, ok…

Sau khi cài xong thì chép file StataMP-64.exe trong thư mục Cracked exe đè vào file chương trình đã được cài đặt trong ổ C như sau

Sau đó cứ bật chương trình Stata17 lên và sử dụng enjoy it.

Như vậy việc tải và cài đặt Stata 17 miễn phí đã hoàn tất, các bạn có thể sử dụng nhé. Trong quá trình sử dụng các bạn có cần hỗ trợ cứ liên hệ nhóm theo số phone sau nhé

 

Stata các loại biến, các loại mô hình trong dữ liệu bảng data panel

Bốn loại biến cơ bản trong dữ liệu bảng panel data

Có bốn loại biến cơ bản có thể được sử dụng trong mô hình dữ liệu bảng panel data:

  1. Đầu tiên là các biến khác nhau giữa các đơn vị phân tích, nhưng không thay đổi theo thời gian (ví dụ: chủng tộc và giới tính, loại hình công ty hoặc cấp học).
  2. Loại biến thứ hai có thể thay đổi theo thời gian, nhưng giống nhau đối với tất cả các đơn vị phân tích tại bất kỳ khoảng thời gian nhất định nào (ví dụ: các chỉ tiêu kinh tế quốc gia: GDP, lạm phát).
  3. Loại thứ ba là một biến số có thể thay đổi theo cả thời gian và đơn vị phân tích(ví dụ: thu nhập, chi tiêu công ty, thành phần học sinh đi học).
  4. Biến cuối cùng là biến thay đổi theo thời gian theo mô hình có thể dự đoán được (ví dụ: thước đo tuổi hoặc thâm niên,ví dụ năm nay thâm niên 10 năm thì sang năm sau chắc chắn sẽ là 11 năm). Việc bao gồm một số biến, chẳng hạn như những biến thay đổi theo đơn vị nhưng không thay đổi theo thời gian, phụ thuộc vào việc sử dụng các hiệu ứng cố định hay ngẫu nhiên. Những cái khác, chẳng hạn như những cái có yếu tố thời gian sẽ phụ thuộc vào khía cạnh thời gian được diễn giải trong mô hình. Nhưng phân tích dữ liệu bảng có các tùy chọn mà theo đó tất cả các loại biến này có thể được đưa vào một số kiểu như là cố định, ngẫu nhiên….

Các loại mô hình cơ bản trong panel data

Các mô hình dữ liệu bảng panel data có thể được sử dụng cho nhiều loại mô hình, từ đơn giản đến những mô hình có mối quan hệ khá phức tạp. Loại mô hình cơ bản nhất là hồi quy pooled OLS, loại bỏ sự phụ thuộc lẫn nhau giữa các quan sát trong một đơn vị phân tích và ước tính một hệ số chặn và hệ số góc không đổi theo thời gian và đơn vị. Điều này tương đương với việc chạy một mô hình hồi quy cơ bản trong đó biến thời gian bị bỏ qua và tất cả các quan sát được phân tích cùng nhau. Mặc dù mô hình này có vấn đề với việc bỏ qua các phụ thuộc trong cùng 1 đơn vị phân tích( ví dụ 1 công ty), nhưng nó có thể tạo thành một mô hình cơ sở cho các mục đích so sánh. Nhưng ta phải được thận trọng vì các hệ số ước tính có thể cung cấp kết quả sai lệch. Tập hợp các mô hình tiếp theo tập trung vào các mức độ khác nhau của kết quả theo đơn vị phân tích cụ thể, trong đó các hệ số chặn, hệ số hồi quy hoặc cả hai thay đổi theo đơn vị.

Lựa chọn giữa fixed effects và random effects

Sự lựa chọn giữa các hiệu ứng cố định và ngẫu nhiên trong các mô hình bảng chủ yếu tập trung vào sự đánh đổi giữa việc kiểm soát tính nội sinh trong các hiệu ứng cố định với hiệu quả thống kê, nhưng kết quả sai lệch do các tác động ngẫu nhiên. Các tác động cố định cung cấp một cách đơn giản để kiểm soát các biến chưa hoặc không thể đo lường được. Điều này được thực hiện bằng cách phân tích từng đơn vị riêng biệt với các hiệu ứng cố định. Bằng cách này, các biến không quan sát được mà không thay đổi theo thời gian là không đổi trong các khoảng thời gian và do đó không thể có bất kỳ ảnh hưởng nào đến kết quả. Bằng cách sử dụng mỗi đơn vị phân tích cho nó tự kiểm soát riêng và các quan sát có quan hệ các quan sát khác trong nhóm, hầu hết các dạng nội sinh đều bị loại bỏ. Nó không thể giải thích cho các biến không được đo lường thay đổi theo thời gian, nhưng tất cả các dạng khác đều được giải quyết. Hơn nữa, các biến không thay đổi theo đơn vị, chẳng hạn như giới tính, v.v., không thể được phân tích vì chúng không đổi trong khoảng thời gian. Do đó, các hiệu ứng cố định sử dụng sự thay đổi trong nội bộ đơn vị để ước tính tất cả các ảnh hưởng và tăng tính nhất quán với chi phí hiệu quả.

Tuy nhiên, các tác động ngẫu nhiên mang lại một loạt các lợi ích và hạn chế khác nhau. Chúng yêu cầu ít tham số ước tính hơn (chủ yếu bằng cách không ước tính điểm chặn cho mỗi đơn vị) và do đó tăng bậc tự do có sẵn. Ngoài ra, các biến bất biến theo thời gian như giới tính hoặc chủng tộc hiện có thể được đưa vào phân tích. Nhưng tất cả những lợi ích này phải được cân nhắc dựa trên sự sai lệch tiềm năng từ các hiệu ứng nội sinh có thể ảnh hưởng đến các ước tính tác động ngẫu nhiên. Do đó, sự lựa chọn giữa các tác động cố định và ngẫu nhiên là sự đánh đổi giữa việc kiểm soát tính nội sinh so với việc tăng hiệu quả và mở rộng các loại biến.

Tóm lại

Mô hình dữ liệu bảng là một khung phân tích được thiết kế cho một cấu trúc dữ liệu cụ thể ,cross-sectional kết hợp với dữ liệu dọc longitudinal, nói đơn giản là ví dụ có nhiều công ty, mỗi một công ty có nhiều năm , mỗi năm đều có các số liệu của công ty đó thì đó là dữ liệu bảng.

Tác động cố định, ngẫu nhiên, kích cỡ mẫu tối thiểu với data panel

Bài này sẽ ví dụ về biến cố định và biến ngẫu nhiên trong dữ liệu bảng,đồng thời giới thiệu về cỡ mẫu phù hợp khi chạy dữ liệu bảng Stata

Tác động cố định và tác động ngẫu nhiên

Có lẽ khái niệm xa lạ nhất đối với hầu hết các nhà nghiên cứu sử dụng hồi quy là tác động cố định so với ngẫu nhiên. Một điểm khác biệt chung giữa tác động cố định và tác động ngẫu nhiên là tác động cố định được sử dụng cho các tham số tổng thể (tức là một giá trị cố định duy nhất trên toàn bộ tổng thể) và tác động ngẫu nhiên được sử dụng khi biến chỉ đại diện cho một mẫu các tác động có thể xảy ra. Ví dụ, giới tính của học sinh sẽ được giả định là một ảnh hưởng cố định vì không bao giờ thay đổi. Nhưng thông tin  về các lớp học của học sinh được chọn ngẫu nhiên trong một trường học thì sao? Trong tình huống này, một hiệu ứng ngẫu nhiên đối với lớp sẽ xảy ra, ví dụ 2 học sinh học lớp 5A có giới tính là nam, thì sang lớp 6 cũng có giới tính là nam, tuy nhiên 2 học sinh này khi vào lớp 6 thì có thể 2 em vào lớp 6A và 6B, nghĩa là thông tin về lớp học là ngẫu nhiên không cố định.

Cuối cùng, sự lựa chọn giữa các hiệu ứng cố định và ngẫu nhiên như thế nào? Trong khi nhà nghiên cứu nên xem xét tác động của các tác động cố định so với ngẫu nhiên dựa trên các vấn đề đã thảo luận ở trên, thì cũng có một thử nghiệm thực nghiệm để cung cấp hướng dẫn. Kiểm định Hausman so sánh kết quả của mô hình hiệu ứng cố định với kết quả của mô hình hiệu ứng ngẫu nhiên. Mức ý nghĩa p= 0,05 ủng hộ giả thuyết rằng có sự khác biệt giữa hai mô hình và do đó mô hình tác động cố định nên được sử dụng. Nếu không có sự khác biệt đáng kể thì có thể sử dụng mô hình hiệu ứng ngẫu nhiên vì nó được ưu tiên hơn so với mô hình hiệu ứng cố định.

Cỡ mẫu khi chạy dữ liệu bảng

Cỡ mẫu phụ thuộc vào mức độ và dựa trên số lượng đơn vị phân tích. Như hồi quy OLS đơn giản, tất cả mẫu đều được sử dụng. Nhưng khi chúng ta chuyển sang các cấp phân tích cao hơn, đơn vị phân tích sẽ thay đổi thành số nhóm trên mỗi cấp (ví dụ: số lớp học, không phải số học sinh). Hơn nữa, số lượng quan sát mỗi nhóm ít quan trọng hơn số lượng nhóm. Quy mô nhóm từ năm quan sát trở lên có thể chấp nhận được miễn là  số lượng nhóm đủ lớn. Vậy có bao nhiêu nhóm và bao nhiêu quan sát mỗi nhóm là chấp nhận được? Heck và Thomas đề xuất quy tắc 20/30 — ít nhất 20 nhóm và 30 quan sát mỗi nhóm. Hox thay đổi điều này một chút với quy tắc 30/30 — ít nhất 30 nhóm và 30 quan sát cho mỗi nhóm. Tuy nhiên, nhiều tình huống nghiên cứu sẽ khác nhau, vì vậy điều nào là quan trọng nhất cần xem xét? Theo nghĩa thực tế, đó là số lượng các nhóm ở bất kỳ cấp độ nào, vì các nhóm bây giờ là đơn vị quan sát để phân tích. Tốt hơn là nên có 30 nhóm với 10 quan sát mỗi nhóm  hơn 10 nhóm với 60 quan sát mỗi nhóm vì có nhiều nhóm hơn để ước tính các tham số. Vì vậy, việc tăng số lượng nhóm ở bất kỳ cấp độ nào luôn hữu ích cho việc ước tính các ảnh hưởng ở cấp độ đó và tăng sức mạnh thống kê.

Vậy quy mô một nhóm có thể nhỏ đến mức nào?

Quy mô nhóm năm thành viên gặp phải trong nhiều tình huống nghiên cứu và cung cấp các ước tính hợp lý. Hơn nữa, chúng không ảnh hưởng đến sức mạnh của các bài kiểm định vì điều đó đến từ số lượng nhóm. Nhưng quy mô nhóm nhỏ hơn sẽ hạn chế độ chính xác của các bài kiểm tra hệ số ngẫu nhiên (sự khác biệt giữa các nhóm về các hệ số chặn hoặc các biến độc lập).

Cách import số liệu nhập file excel vào stata

Nhóm MBA Bách Khoa hướng dẫn bạn cách đưa file excel vào chương trình Stata để thực hiện phân tích số liệu nhé.

Các bước import số liệu nhập file excel vào stata

Bước 1: Mở chương trình Stata

Bước 2: Vào menu File-Import-Excel Spreadsheet

Bước 3: Bấm nút Browse để chọn file excel, sau đó check vào Import first row as variable names.( nếu file excel có nhiều sheet thì bạn nhớ chọn đúng sheet cần đưa vào ở mục Worksheet nhé)

Sau đó nhấn ok. Là dữ liệu đã được đưa vào Stata rồi nhé

Để kiểm tra lại, bạn có thể gõ lệnh sum để thống kê mô tả các biến để xem đưa vào thành công chưa nhé

Như vậy bạn đã biết cách import số liệu nhập file excel vào stata. Quá trình làm có thắc mắc các bạn cứ liên hệ nhóm nhé.

 

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