Giới thiệu khái quát và hướng dẫn sử dụng phần mềm Epidata 3.1 để xây dựng bộ nhập liệu. Ưu điểm của bài hướng dẫn là có hình ảnh trực quan và một số lệnh nâng cao như xây dựng phần nhập cho câu hỏi nhiều lựa chọn.
Trang 11
HƯỚNG DẪN SỬ DỤNG EPIDATA 3.1
1 Mục tiêu
Làm được việc khai báo và tạo check cho biến của bộ câu hỏi điều tra định
lượng
2 Nhập đề
* Nhập số liệu từ phiếu/bộ câu hỏi điều tra vào máy tính là một giai đoạn của một quá
trình nghiên cứu Vì vậy người thiết kế chương trình nhập liệu (Bao gồm khai báo và tạo check cho các biến) phải hiểu nội dung nghiên cứu, các chỉ số của nghiên cứu và
dữ liệu phân tích (Gồm tệp số liệu, bản ghi, biến, kiểu dữ liệu) là như thế nào
* Việc khai báo, tạo check cho các biến của bộ câu hỏi phải đảm báo yêu cầu sau:
- Với số liệu: Đảm bảo chính xác, đầy đủ, logic của thông tin
- Với nhập liệu viên: Giao diện thân thiện (đẹp về hình thức, dễ hiểu về nội dung trình bày), dễ nhập, nhanh chóng (loại bỏ các thao tác thừa)
*Giao diện và các file chính được tạo bởi Epidata
- Khai báo bộ câu hỏi
(
)
-
- Là nguồn để sinh
tệp REC
- Chứa dữ liệu
- Sinh ra từ tệp QES
- Chứa mã nguồn thực thi các ràng buộc nhằm hạn chế lỗi số liệu
- Luôn đi kèm với một tệp REC tương ứng
3 Khai báo và tạo check cho biến
3.1 Khai báo các biến với Epidata
Bước 1: Xác định chuỗi định dạng cho các câu hỏi/mục thông tin trên phiếu điều tra
- Câu hỏi đó là nhiều lựa chọn hay một lựa chọn
Trang 22
- Nó là câu hỏi/mục thông tin dạng chữ (Text) hay dạng số (Numberic) hay
ngày/tháng/năm Với kiểu dữ liệu dạng số hoặc dạng chữ xác định độ lớn của các ký
tự mà biến đó có thể nhận
* Bảng: Các chuỗi định dạng dữ liệu hay dùng
<IDNUM> - Dạng số được EpiData sinh tự động khi nhập, giá trị của biến
này tương ứng số thứ tự của bản ghi bản ghi được nhập vào chương trình
- Sử dụng khai báo cho dữ liệu dạng chữ hoặc số
- Độ rộng lớn nhất là 80 ký tự (Gạch dưới: _)
<A > - Trường chữ: “String”
- Chữ được viết hoa
- Sau “A” bấy nhiêu lần cách là bấy nhiêu ký tự
<dd/mm/yy> hoặc
<dd/mm/yyyy>
<Today-dmy>
- Khai báo ngày, tháng, năm
- Hiển thị theo ngày trên “đồng hồ máy tính” khi nhập liệu
Bước 2: Tạo một file QES để khai báo và bộ cục giao diện nhập liệu
hoặc
Ctrl + S hoặc để lưu tệp QES trong ổ cứng máy tính
Khai báo các thông tin của phiếu điều tra ở tệp QES Bằng việc đánh máy tay nếu chỉ
có bản giấy của phiếu điều tra hoặc “copy – pase” nếu có bản điện tử của phiếu điều
tra
Ở đây có một vài lưu ý:
Lưu ý thứ nhất: Do EpiData giới hạn khai báo với 1000 dòng, nếu mà phiếu điều tra
vượt quá giới hạn này chúng ta cần tách ra thành nhiều tệp nhập liệu cho từng phần thông tin khác nhau Còn việc liên kết các tệp dữ liệu này với nhau sẽ giới thiệu trong phần check nhập liệu
Lưu ý thứ 2: Do EpiData không hỗ trợ chuẩn Unicode mà chỉ hỗ trợ chuẩn TCVN3
nên muốn hiện thị tiếng việt phải sử dụng font của TCVN3 khi khai báo (Font chữ có
“.vn….” ở đầu) Và lựa chọn lại Font TCVN3 hiển thị ở File/Options/Editor và
File/Options/Show data form
Trang 33
Lưu ý thứ 3: Thủ thuật “copy – pase”: Copy từ phiếu điều tra được thiết kế trên
Word Pase vào tệp QES Bố cục lại giao diện, từ khóa, xóa bỏ lưu ý chỉ dẫn/lưu
ý của phiếu điều tra Tên biến+kiểu dữ liệu+độ dài ký tự của biến
Nếu phiếu điều tra trên word bố cục nằm trong bảng cứ copy all vào QES và sau khi
“tắt bật lại” thì sẽ mất bảng/table
Nếu phiếu điều tra trên word ở sử dụng chuẩn unicode thì hãy sử dụng chức năng
chuyển chuẩn Unicode sang TCVN3 của chương trình gõ font tiếng việt Unikey để chuyển Với thao tác copy all thông tin trên word Lựa chọn theo bảng dưới
pase vào QES
Lưu ý thứ 4: Đặt tên biến trùng với tên và số thứ tự của câu hỏi/đề mục trên phiếu
điều tra Điều này giúp cho việc tiện theo dõi, phân tích, đối chiếu khi sửa số liệu sau 2 lần nhập và phân tích dữ liệu sau này
3.2 Tạo file REC để nhập liệu
Trang 44
3.3 Tạo file CHK để tạo sự giàng buộc số liệu khi nhập liệu
3.3.1 Giao diện và tính năng
Trang 55
3.3.2 Một số dòng lệnh check hay dùng
Bảng: Một số check hay dùng
BEFORE ENTRY - Trước khi nhập
- Hàng dưới của nó phải hàm chứa một điều kiện nào đó
BEFORE ENTRY <command>
<command>
END
AFTER ENTRY - Sau khi nhập
- Hàng dưới của nó phải hàm chứa một điều kiện nào đó
AFTER ENTRY <command>
<command>
END
TOPOFSCREEN - Tạo trường nhập để gán giá trị sau khi
nhập cho biến khác
HIDE/UNHIDE - Ẩn biến hoặc không ẩn biến khi có một
điều kiện nào đấy -
IF …… THEN
Các hàm điều kiện
AND Và/đồng
thời
<> Khác
> Lớn hơn
< Nhỏ hơn
HELP « thông báo muốn
hiển thị »
- Khi nhập giá trị nào đó vào muốn
“Thông báo hiện thị nào đó” vi dụ
- -Nhắc nhở khi nhập không đúng
Unhide/hide - Ẩn/hiện biến nào đấy
id
KEY UNIQUE 1
CONFIRMFIELD
END
- Khi nhập một mã số mà trùng với mã số trước đó đã nhập rồi thì hiển thị thông báo
3.3.3 Một số ví dụ thường gặp khi nhập liệu trên
Ví dụ 1:
VAR2
RANGE 1 3 Giá trị biến nhận trong khoảng từ 1 đến 3
MUSTENTER Bắt phải nhập
JUMPS Bước nhảy
1 VAR4 Khi Var1=1 chuyển tới VAR4
2 VAR5 Khi Var1=1 chuyển tới VAR5
3 VAR10 Khi Var1=1 chuyển tới VAR6
END
AFTER ENTRY
IF (VAR2=2) AND (VAR1=1) THEN
HELP "Xem lại: VAR1 không thể nhận giá trị 2 nếu biến F2=1" Hiển thị thông báo
GOTO VAR2 quay trở về biến VAR2
ENDIF
END
END
Trang 66
Trang 77
Ví dụ 2: Check hiện thông báo giá trị vừa được nhập là gì với Epidata
* Trên 1 file rec
LABELBLOCK
LABEL label_sex
1 nam
2 Nu
END
END
Sex
COMMENT LEGAL USE label_sex Hiện chữ màu xanh bên cạnh giá trị vừa
nhập
TYPE COMMENT hiện giá trị cần nhập khi ấn F9
END
* Giá trị hiển thị có thể nằm trong một file rec số liệu khác
Bien_hienthi
COMMENT LEGAL file_khac.rec
TYPE COMMENT
END
Trang 88
Check tính khoảng thời gian giữa 2 thời điểm
Bạn muốn tính khoảng thời gian giữa 2 thời điểm:[ d1 và d2 =Tổng bao nhiêu ngày (d6) =
bao nhiêu năm (d3) + lẻ bao nhiêu tháng (d4) + lẻ bao nhiêu ngày (d5) ]
Dưới đây là dòng lệnh giúp bạn làm điều đó
File CHK
d1 MUSTENTER END
d2 MUSTENTER AFTER ENTRY
if d2 < d1 then help "Xem lai: d2 < d1 "
goto d2 endif d3=integer((d2-d1)/365.25) d4=integer(((d2-d1)/30.5)-(12*d3)) d5=d2-d1-integer(d4*30.5)-(365.25*d3) d6=d2-d1
END END d3 noenter end d4 noenter end d5 noenter end d6 noenter end
File QES
d1 <dd/mm/yyyy>
d2 <dd/mm/yyyy>
d3 số năm chẵn ###
d4 số tháng lẻ ##
d5 số ngày lẻ ####
Days total:
d6 days ########
Trang 99
Check EpiData với biến danh mục
Lấy câu này làm hướng dẫn
C109 Hiện nay bạn đang làm những nghề gì?
(Gợi ý trả lời: còn nghề gì khác không?
Giải thích:
Nghề tự do: lái xe ôm, bán nước,…
Việc bất hợp pháp: cờ bạc, bán ma túy,…
Không đọc các khả năng xảy ra, chỉ gợi ý và
khoanh vào tất cả các câu trả lời
Làm ruộng 1 Nhân viên nhà nước 2 Nhân viên phục vụ 3 Nhõn viờn bán hàng 4 Chủ kinh doanh/buôn bán 5
Sinh viên 6 Nghề tự do 7 Việc bất hợp pháp 8 Hiện tại thất nghiệp 9 Khác (ghi rõ)…… ……… 10
Bạn đang đứng trước một câu hỏi đa lựa chọn, ở đây là 10 lựa chọn khác nhau, lựa chọn cuối cùng là khác(Ghi rõ) Công việc của bạn là thiết kế trên EpiData sao cho các dữ liệu được nhập chính xác, đầy đủ và tiết kiệm công sức của nhập liệu viên
Đứng trước câu hỏi này có 2 cách giải quyết cho bài toàn trên với số liệu ở dạng số (numberic)
Hướng 1: Tạo một trường C109x chỉ nhập số thứ tự của từng lựa chọn và các biến (c109x1, c109x2, c109x3,…,c109x10) sẽ nhận những giá trị tương ứng khi ta nhập Và nếu chọn “10
Khác” thì xuống biến c109x10x để ghi rõ lựa chọn khác, còn lựa chọn từ 1 đến 9 thì bỏ qua
biến c109x10x1 (Ghi rõ nghề khác)
Bước 1.1 Khai báo
Bạn vào khai báo câu hỏi này như sau:
Lưu ý: Nếu ta nới rộng khoảng giá trị của biến thêm 2 ký tự ( c109x @##) sẽ làm ta mất khả
nhiều công sức ENTER khi câu hỏi có lựa chọn nhỏ hơn 9 (tức 1 ký tự) vì chưa lấp đầy ký tự
nó sẽ không tự nhảy Nên ở đây nếu câu hỏi có lựa chọn 10, ta sẽ gán cho nó là số “0” khi nhập liệu
Sau khi để tạo file nhập liệu trong cửa số nhập liệu sẽ hiện thị như sau:
Trang 1010
Bước 1.2 Check để nhập liệu
Khi vào trong ta sẽ sử dụng đoạn mã như sau để thực hiện các mục tiêu trên
Trang 1111
Chi tiết như sau:
c109x
TOPOFSCREEN
RANGE 0 9
AFTER ENTRY
IF c109x= THEN
IF c109x10x = 1 THEN
UNHIDE c109x10x1
ELSE
HIDE c109x10x1
ENDIF
ELSE
IF c109x=1 THEN
IF c109x1 = 1 THEN
CLEAR c109x1
ELSE
c109x1=1
ENDIF
ENDIF
IF c109x=2 THEN
IF c109x2 = 1 THEN
CLEAR c109x2
ELSE
c109x2=1
ENDIF
ENDIF
IF c109x=3 THEN
IF c109x3 = 1 THEN
CLEAR c109x3
ELSE
c109x3=1
ENDIF
ENDIF
IF c109x=4 THEN
IF c109x4 = 1 THEN
CLEAR c109x4
ELSE
c109x4=1
ENDIF
ENDIF
IF c109x=5 THEN
Trang 1212
IF c109x5 = 1 THEN
CLEAR c109x5
ELSE
c109x5=1
ENDIF
ENDIF
IF c109x=6 THEN
IF c109x6 = 1 THEN
CLEAR c109x6
ELSE
c109x6=1
ENDIF
ENDIF
IF c109x=7 THEN
IF c109x7 = 1 THEN
CLEAR c109x7
ELSE
c109x7=1
ENDIF
ENDIF
IF c109x=8 THEN
IF c109x8 = 1 THEN
CLEAR c109x8
ELSE
c109x8=1
ENDIF
ENDIF
IF c109x=9 THEN
IF c109x9 = 1 THEN
CLEAR c109x9
ELSE
c109x9=1
ENDIF
ENDIF
IF c109x=0 THEN
IF c109x10x = 1 THEN
CLEAR c109x10x
ELSE
c109x10x=1
ENDIF
ENDIF
CLEAR c109x
GOTO c109x
ENDIF
END
END
Tiếp theo: Bỏ qua không phải nhập giá cho các biến c109x1 …c109x10x, vì chúng đã nhận giá trị khi nhập ở biến c109x
Trang 1313
c109x1
NOENTER
END
c109x2
NOENTER
END
c109x3
NOENTER
END
c109x4
NOENTER
END
c109x5
NOENTER
END
c109x6
NOENTER
END
c109x7
NOENTER
END
c109x8
NOENTER
END
c109x9
NOENTER
END
c109x10x
NOENTER
END
Bước 1.3: Vào để xem thành quả
Hướng 2: Tạo ra 10 biến tương ứng với 10 lựa chọn, ta cứ lần lượt đến từng biến để nhập
giá trị (1-0) Tuy nhiên hướng này mình không khuyến cáo vì mất nhiều công sức và thời
gian của nhập liệu viên
Hướng 3: Tạo 2 trường trữ (c109 và c109k), 1 trường để nhập các lựa chọn và một trường
nữa để nhập “Ghi rõ lựa chọn khác” khi có lựa chọn “10.Khác” Tuy nhiên cái không này sợ
cậu không biết phân tích dữ liệu về sau với ký tự dạng chữ (chuỗi) Check như sau:
Hướng 3
BEFORE file DEFINE A1
DEFINE A2
DEFINE A3
DEFINE A4
DEFINE A5
DEFINE A6
DEFINE A7
DEFINE A8
DEFINE A9
DEFINE A10
END C109
Trang 1414
AFTER ENTRY LET A1=COPY(C109,1,1) LET A2=COPY(C109,2,1) LET A3=COPY(C109,3,1) LET A4=COPY(C109,4,1) LET A5=COPY(C109,5,1) LET A6=COPY(C109,6,1) LET A7=COPY(C109,7,1) LET A8=COPY(C109,8,1) LET A9=COPY(C109,9,1)
IF A1=“0” THEN GOTO C109K ENDIF
IF A2=“0” THEN GOTO C109K ENDIF
IF A3=“0” THEN GOTO C109K ENDIF
IF A4=“0” THEN GOTO C109K ENDIF
IF A5=“0” THEN GOTO C109K ENDIF
IF A6=“0” THEN GOTO C109K ENDIF
IF A7=“0” THEN GOTO C109K ENDIF
IF A8="9" THEN GOTO C109K ENDIF
IF A8="9" THEN GOTO C109K ENDIF
ELSE GOTO c201 ENDIF END END
Lưu ý:
- Với câu hỏi nhiều lựa chọn thì hãy copy đoạn lệnh trên, và rename tên biến đi và xóa
bỏ những đoạn không cần thiết là được Bằng cách làm trên word hoặc trên notepad
Sau đó copy đoạn lệnh đó vào
Trang 1515
Check tạo liên kết giữa 2 file nhập liệu
Nếu bạn đứng trước bộ phiếu điều tra với: thông tin hộ gia đình và thông tin về các
thành viên trong hộ (ví dụ như thông tin về tình trạng dinh dưỡng của những đứa trẻ trong hộ hay chi tiết các lần khám chữa bệnh của từng thành viên trong hộ…) Điều
mà bạn cần phải làm với EpiData là:
1 Thiết kế 2 form nhập liệu, một là form mang thông tin hộ gia đình (HGD.rec) và một form mang thông tin thành viên trong hộ gia đình (THANHVIEN.rec)
2 Tạo check mỗi liên hệ giữa 2 form nhập liệu với nhau bởi biến mã hộ gia đình
(id_hgd), nghĩa là khi các thành viên trong hộ gia đình phải cùng mã hộ đó
Những dòng lệnh dưới đây giúp bạn làm điều đó
id_hgd
KEY UNIQUE 1
END
id_hgd KEY 1 AFTER ENTRY
vid_tinh = id_tinh
vid_huyen = id_huyen
vid_xa = id_xa
vngay_dt = ngay_dt
END END BEFORE FILE
* helper temporary variables
DEFINE vid_tinh ###### GLOBAL
DEFINE vid_huyen ###### GLOBAL
DEFINE vid_xa ###### GLOBAL
DEFINE vngay_dt
GLOBAL
END
Đến biến nào đấy (Vd: bienchuyen ) mà
sau khi bạn nhập thì lâp tức đến
form THANHVIEN.REC để nhập thông
tin thành viên thì bạn check tại
biến này như sau
Bienchuyen
AFTER ENTRY
vid_tinh = id_tinh
vid_huyen = id_huyen
vid_xa = id_xa
vngay_dt = ngay_dt
RELATE id_hgd THANHVIEN.REC
END
END
id_tinh
NOENTER END
id_huyen
NOENTER END
id_xa
NOENTER END
ngay_dt
NOENTER END
Trang 1616
TÀI LIỆU THAM KHẢO
1 Phạm Việt Cường và cs, Tài liệu giảng dạy môn kỹ thuật máy tính – phần mềm EpiData (2006), Đại học Y tế Công cộng
2 http://www.epidata.dk