Upload
precious-gatlin
View
221
Download
3
Embed Size (px)
Citation preview
Multiple Indicator Cluster SurveysData Processing Workshop
Data Entry Applications with Logic
MICS Data Processing Workshop
Topics to be Discussed
• what is the “path” of data entry?• skip and reenter• manipulating the path via procedures• processing order in CSPro• more commonly-used CSPro commands• creating user-defined variables• adding messages to your program
The Data Entry Path
• The data entry path contains all of the questions that a respondent should be asked and observed
• It is determined by– the type of the questionnaire– the responses to questions in conjunction with
• questionnaire skips• questionnaire filters
• It is controlled by logic you develop
Changing the path via skipCSPro has two ways of implementing skips:skip to
Use if moving to a singly-occurring variable or to a roster:skip to <variable_name>;skip to <group_name>;
skip to nextUse if the var. being skipped to is in a repeating form/roster:skip to next <repeating_variable_name>;skip to next <group_name>;
Changing the path via reenter
• To force the data entry operator to reenter the current field (e.g., if the data entered are inconsistent) use:
reenter;• By default, reenter forces reentry of the
current field. If you wish to force reentry of a previously-entered field, use:
reenter <field_name>;
CSPro Procedure Types
Global procedure (PROC GLOBAL)• logic executed when the Data Entry App begins
Form File procedure (PROC <form_file_name>)• logic executed when the Data Entry App begins/ends
Level procedure (PROC <level_name>)• logic executed when a level begins/ends
Group procedure (PROC <group_name>)• logic executed when a form/roster begins/ends
Variable procedure (PROC <variable_name>)• logic executed before/after a variable is keyed
preproc and postproc
There are two types of procedures:preproc
• logic executed before the item• for example, skip to another variable
postproc• logic executed after item• for example, check if data entered is consistent• for example, skip to a variable• default action for logic if nothing explicitly written
Order of OperationsPROC GLOBAL (executes at start of program, cannot stipulate preproc or postproc)Form File preproc
Level 1 preprocForm 1.1 preproc
Field 1.1.1 preprocField 1.1.1 postprocrepeat for other <Form 1.1 fields>
Form 1.1 postprocrepeat for other <Level 1 forms>
Level 2 preprocForm 2.1 preproc
Field 2.1.1 preprocField 2.1.1 postproc
Form 2.1 postprocrepeat for other <Level 2 forms>
Level 2 postprocLevel 1 postproc
Form File postproc
Ending a Level
• You must prematurely finish a level if– the last variable in the data path is not the last
variable on the questionnaire– there are no more woman or children’s
under-five questionnaires left for the HH• This is accomplished using the endlevel
command
The endlevel Command
• The effect of the endlevel command depends upon its context/location:– In a field/roster/form proc, control passes to the
current level’s postproc– In a level 2 or higher postproc, control passes to
the next highest level’s postproc– In a level 1 proc, control passes to the application,
i.e., the form file’s postproc
Operator vs. System Controlled
• Operator-controlled: the keyer has some/ all control on the data entry path
• System-controlled: the keyer has no control over the data entry path– go to options data entry – choose “system controlled”– (while you are there, make all alphanumeric
variables upper case)
Ending a Group• A group is a roster or multiply-occurring form• Is terminated by using the endgroup
command• Passes control to the group’s postproc—all
intervening logic (in other form/roster items) is skipped
User-defined Variables
• User-defined variables must be declared in the PROC GLOBAL section and as implied, are global in scope
• Numeric working variables can be declared together– numeric var1, var2;
• Alphanumeric variables must be declared separately:– alpha(length) avar1;– alpha(length) avar2;
User-defined Variables (cont)
• All variables must be declared in the preproc of the form_files procedure
• User-defined variables should be assigned a value within the preproc of the form_files, e.g., minab = 144;
• You should give a description of your variable at either the place of declaration or initialization, e.g.,numeric minab; {min. age at first birth in months}
Recoding Variables
• To more easily assign values to a variable based on another variable, use recode
• The following logic recodes women’s age into groups:recode WB2 => agegrps;
15-19 => 1;20-24 => 2;
=> 3;endrecode;
if command
Use the if command to check for a condition:if HH9 <> 1 thenskip to HH16;
endif;
if (HH9=1 and HH11=0) or (HH9 in 2:4,6 and HH11<>0) thenreenter;
endif;
Generating Error Messages
• Example: If the cluster number is invalid, we can show the operator a message to explain what the problem is; for example,
errmsg(“Cluster number invalid”);• However, to be more useful, we should tell them
what the valid range is; to do this, we can pass in parameters to the command as follows:
errmsg(“Cluster number invalid, expected range %d to %d”, MinClust, MaxClust);
Error Message Parameters
• The values of any variables listed after the error message number will be passed to the error message
• Parameters are displayed in the error message using– %d for numeric values– %s for alphanumeric values (i.e., text)
Streamlining Error Messages
• Suppose we need to repeat the same message several times in the file—what should we do?
• We can assign unique numbers to each error message
• We can keep all error messages in the message file (.mgf)
Sample Error Messages
• Our earlier message (and maybe one we could use for that HH result code earlier) would now be simplified to:errmsg(1, MinClust, MaxClust);errmsg(2, HH9, HH11);
• And the message file would look something like:
0001 Cluster number invalid, expected range %d to %d0002 HH result code (%d) doesn’t agree with number of
HH members (%d)
Modifying Your Test Application
• Add logic to– check if the household number is consistent
• display message and add reenter command if not– implement the HH result code skip – check the date of interview is internally consistent
• display message and force reentry if not• Compile your application, resolve any errors• Save your application (<ctrl+S>)