Given:

If a variable is coded from 1 to 10 and can hold any number values, then we have two problems:

a) parsing out the values

b) differentiating between ‘1’ and ’10’

For example, lets say we have a variable CD18 that is defined as “Who took the blood sugar?”, and we allow the participant to answer “check all that apply”:

(1) Mother               (2) Father

(3) Grandmother      (4) Grandfather

(5) Sister                 (6) Brother

(7) Aunt                   (8) Uncle

(9) Other Relative      (10) Non-Relative

The problem is that SAS will import a string of values.  In Python we might call it a list of strings. For example if the Mother and Sister had recorded the blood sugar, CD18 might = “15”, however if the Father had taken the measurement then CD18 is coded “2”. What happens if the participant indicated a non-relative?

If you parse for the presence of a ‘1’ in the string, you will miss information or could have a misclassification bias. Instead you need to use logic statements to better parse the data.

/* SCANNING for Mother */

IF CD18 = ” THEN CD18_mother = .;

ELSE IF (Index(CD18, ‘1’) ^=0) AND (Substr(CD18,2,1) ^= “0”) THEN CD18_mother = 1;

ELSE CD18_mother =0;

/* SCANNING for Father */

IF CD18 = ” THEN CD18_father = .;

ELSE IF Index(CD18, ‘2’) ^=0 THEN CD18_father = 1;

ELSE CD18_father =0;

/* SCANNING for Grandmother */

IF CD18 = ” THEN CD18_grandmother = .;

ELSE IF Index(CD18, ‘3’) ^=0 THEN CD18_grandmother = 1;

ELSE CD18_grandmother =0;

/* SCANNING for Grandfather */

IF CD18 = ” THEN CD18_grandfather = .;

ELSE IF Index(CD18, ‘4’) ^=0 THEN CD18_grandfather = 1;

ELSE CD18_grandfather =0;

/* SCANNING for Sister */

IF CD18 = ” THEN CD18_sister = .;

ELSE IF Index(CD18, ‘5’) ^=0 THEN CD18_sister = 1;

ELSE CD18_sister =0;

/* SCANNING for Brother */

IF CD18 = ” THEN CD18_brother = .;

ELSE IF Index(CD18, ‘6’) ^=0 THEN CD18_brother = 1;

ELSE CD18_brother =0;

/* SCANNING for Aunt */

IF CD18 = ” THEN CD18_aunt = .;

ELSE IF Index(CD18, ‘7’) ^=0 THEN CD18_aunt = 1;

ELSE CD18_aunt =0;

/* SCANNING for Uncle */

IF CD18 = ” THEN CD18_uncle = .;

ELSE IF Index(CD18, ‘8’) ^=0 THEN CD18_uncle = 1;

ELSE CD18_uncle =0;

/* SCANNING for Other-Relative */

IF CD18 = ” THEN CD18_other = .;

ELSE IF Index(CD18, ‘9’) ^=0 THEN CD18_other = 1;

ELSE CD18_other =0;

/* SCANNING for Non-Relative */

IF CD18 = ” THEN CD18_non = .;

ELSE IF Index(CD18, ‘0’) ^=0 THEN CD18_non = 1;

ELSE CD18_non =0;