[EpiData-list] Combining logical operators

epidata-list at lists.umanitoba.ca epidata-list at lists.umanitoba.ca
Thu Sep 8 08:45:41 CDT 2011

If teapd, teapwk or teapmth are left blank (i.e. missing), the logic may fail. The > and < comparisons cannot be guaranteed to work with missing values because EpiData does not like logic with missing values (e.g. "missing" AND false). If you turn on the option to flag all computational errors at Entry time, you will see the error.

Your logic is correct for the situation when a number is entered for ALL 3 fields.

I'm surprised that your second solution works - I've never seen more than one BEFORE ENTRY block in a field.

If unused entries are left blank, use the same logic but like this:

IF ((teapd<>.) and (teapwk<>.)) or ... THEN

Here is something you can do.

For TEAPD, TEAPWK and TEAPMTH, include:

  IF (teapd=.) then
   teapd = -1

This ensures that the missing value -1 is entered.

In the BEFORE ENTRY block, you will also want to put something like:

  IF ... THEN
    HELP "Only one of ..."
    GOTO teapd

Otherwise, you can just ignore the help message and carry on.

I would probably have made the .qes look like this:

teafreq ##   teaper ## (1=day, 7=week, 30=month)

This avoids the need for logic.


On 2011-09-08, Suzanna wrote:

> Is it possible to combine AND and OR into a single IF statement. If so,
> how? I have  variables for the number of cups of tea consumed per
> day/week/month. The 3 variables are teapd, teapwk and teapmth. Only one
> of these should be filled in. -1 is the missing code and a value>0
> indicates the number of cups consumed.

More information about the EpiData-list mailing list