********************************************************************************** * PROGRAM: ALCSTAT_recode_1997_2018_NHIS_Sample_Adult_AHB.sas * DATE: Fall 2017 * PROJECT: Alcohol Special Topic website * DATA SET: NHIS 1997 SAMPLE ADULT PUBLIC USE * NOTES: This code has been used by NCHS's Division of Health * Interview Statistics to create the recode "ALCSTAT" * on the Sample Adult data files for years 2004-2018. * Code contains comments applicable to NHIS data processing and * can be ignored. * The sas code is written in such a way that it can be applied * retroactively to data years 1997-2003. * [Note the two-step process.] * Notes2: A different version of this recode (alc7stat) is included on the * Sample Adult data years 1997-2003. * In the alc7stat recode, the category for unknowns includes * "former, unknown frequency" whereas in ALCSTAT, there is a * separate code (=4) for this type of unknown. * This program uses 1997 NHIS Sample Adult as an example. ************************************************************************************; libname nhis1997 "c:\my_files\1997\" ; LIBNAME LIBRARY "c:\my_files\1997\" ; PROC FORMAT; VALUE ALCSTAT 1 = 'Lifetime Abstainer:<12 life' 2 = 'Former infrequent: <12 1yr' 3 = 'Former regular: >=12 1 yr' 4 = 'Former, frequency unknown' 5 = 'Current infrequent: <12 pst yr' 6 = 'Current Light: <=3/wk' 7 = 'Current Moderate: F>3-7wk/M>3-14wk' 8 = 'Current Heavy: F>7wk/M>14wk' 9 = 'Current, frequency unknown' 10 = 'Drinking status unknown ' ; *********** ALCOHOL RECODE ALCSTAT *****; DATA ALCOHOL; set nhis.samadult; ************************************************ * 2.9 Edit spec: ALCSTAT.xls * ************************************************; *---------------------------------------------------------------------* * 2.9a Decision logic table: (ALCSTAT.xls) DLT_a * * Create preliminary recode: ALCSTAT1 * * drinking status preliminary recode * *---------------------------------------------------------------------*; IF ALC1YR= 2 |( 7 <=ALC1YR<= 9 ) THEN IF ALCLIFE= 2 THEN DO; ALCSTAT1= 1 ; XALCa= 1 ; END; ELSE IF ALCLIFE= 1 THEN DO; IF ALC12MYR= 000 THEN DO; ALCSTAT1= 2 ; XALCa= 2 ; END; ELSE IF 001 <=ALC12MYR<= 365 THEN DO; ALCSTAT1= 3 ; XALCa= 3 ; END; ELSE IF ALC12MYR= 999 THEN DO; IF 01 <=ALCAMT<= 95 THEN DO; ALCSTAT1= 3 ; XALCa= 4 ; END; ELSE DO; ALCSTAT1= 9 ; XALCa= 5 ; END; END; ELSE DO; ALCSTAT1= 9 ; XALCa= 6 ; END; END; ELSE DO; ALCSTAT1= 9 ; XALCa= 7 ; END; *----------------------------------------------------* * 2.9b Decision logic table: (ALCSTAT.xls) DLT_b * * -continuation of DLT_a * *----------------------------------------------------*; ELSE IF ALC1YR= 1 THEN IF ALC12MYR= 000 THEN DO; ALCSTAT1= 2 ; XALCb= 8 ; END; ELSE IF 001 <=ALC12MYR<= 365 THEN DO; ALCSTAT1= 3 ; XALCb= 9 ; END; ELSE IF ALC12MYR= 999 THEN IF 01 <=ALCAMT<= 95 THEN DO; ALCSTAT1= 3 ; XALCb= 10 ; END; ELSE DO; ALCSTAT1= 9 ; XALCb= 11 ; END; ELSE DO; ALCSTAT1= 9 ; XALCb= 12 ; END; ELSE IF ALC1YR NOT IN( 1 , 2 , 7 , 8 , 9 ) THEN DO; ALCSTAT1= 9 ; XALCb= 13 ; END; ELSE; *-------------------------------------------------------------* * 2.9c Decision logic table: (ALCSTAT.xls) DLT_c * * create recode: ALCSTAT (part 1 of 3) * * - assigning codes for "drinking status unknown," * * lifetime abstainers and former drinkers * *-------------------------------------------------------------*; IF ALCSTAT1> 3 THEN DO; ALCSTAT= 10 ; XALCc= 1 ; END; ELSE IF ALCSTAT1= 1 THEN DO; ALCSTAT= 01 ; XALCc= 2 ; END; ELSE IF ALCSTAT1= 2 & ALC1YR= 2 THEN DO; ALCSTAT= 02 ; XALCc= 3 ; END; ELSE IF ALCSTAT1= 2 & ALC1YR= 1 THEN DO; ALCSTAT= 03 ; XALCc= 4 ; END; ELSE IF ALCSTAT1= 2 & ALC1YR> 2 THEN DO; ALCSTAT= 04 ; XALCc= 5 ; END; ELSE IF ALCSTAT1= 3 THEN XALCc= 6 ; ELSE; *--------------------------------------------------------------------------* * 2.9d Decision logic table: (ALCSTAT.xls) DLT_d * * create recode: ALCSTAT (part 2 of 3) * * - calculate number of drinks in the past year and average * * number of drinks per week for current drinkers and assign * * ALCSTAT=9 when drinking level is unknown * *--------------------------------------------------------------------------*; IF ALCSTAT1= 3 THEN IF 001 <=ALC12MYR<= 365 & 01 <=ALCAMT<= 95 THEN DO; N1=MIN((ALC12MYR*ALCAMT),9995); N2=MIN(((7*ALC12MYR*ALCAMT)/365),995); XALCd= 1 ; END; ELSE DO; ALCSTAT= 09 ; N1=-1; N2=-1; XALCd= 2 ; END; ELSE; *--------------------------------------------------------------* * 2.9e Decision logic table: (ALCSTAT.xls) DLT_e * * create recode: ALCSTAT (part 3 of 3) * * - assign drinking levels for current drinkers * *--------------------------------------------------------------*; IF ALCSTAT1= 3 AND 001 <=ALC12MYR<= 365 & 01 <=ALCAMT<= 95 THEN IF 1<=N1<=11 THEN DO; ALCSTAT= 05 ; XALCe= 1 ; END; ELSE IF 0<=N2<=3 THEN DO; ALCSTAT= 06 ; XALCe= 2 ; END; ELSE IF SEX= 1 & 3