*** SAS file generated by sastangle ***; options nocenter nodate nonumber ls=80 formdlim=''; *** Code chunk number 1 ***; proc import datafile='c:/book/help.csv' out=dsprelim dbms=dlm; delimiter=','; getnames=yes; run; data ds; set dsprelim; keep id cesd f1a -- f1t i1 i2 female treat; run; *** Code chunk number 2 ***; options ls=70; /* narrows width to stay in grey box */ ods select attributes; proc contents data=ds; run; ods select all; *** Code chunk number 3 ***; options ls=70; /* narrows width to stay in grey box */ ods select variablesshort; proc contents data=ds short; run; ods select all; *** Code chunk number 4 ***; proc print data=ds (obs=3) width=minimum; run; *** Code chunk number 5 ***; libname book 'c:/temp'; data book.ds (label = "HELP baseline dataset"); set ds; run; *** Code chunk number 6 ***; proc export data=ds replace outfile="c:/temp/ds.xls" dbms=excel; run; *** Code chunk number 7 ***; proc print data=ds (obs=10); var cesd; run; *** Code chunk number 8 ***; proc print data=ds; where cesd gt 56; var cesd; run; *** Code chunk number 9 ***; proc sort data=ds out=dss1; by cesd; run; proc print data=dss1 (obs=4); var id cesd i1 treat; run; *** Code chunk number 10 ***; options ls = 70; proc means data=ds min q1 median q3 max mean std n nmiss; var f1g; run; *** Code chunk number 11 ***; data cesd; set ds; /* list of backwards questions */ array backwards [*] f1d f1h f1l f1p; /* for each, subtract the stored value from 3 */ do i = 1 to dim(backwards); backwards[i] = 3 - backwards[i]; end; /* this generates the sum of the non-missing questions */ newcesd = sum(of f1a -- f1t); /* This counts the number of missing values, per person */ nmisscesd = nmiss(of f1a -- f1t); /* this gives the sum, imputing the mean of non-missing */ imputemeancesd = mean(of f1a -- f1t) * 20; run; *** Code chunk number 12 ***; proc print data=cesd (obs=20); where nmisscesd gt 0; var cesd newcesd nmisscesd imputemeancesd; run; *** Code chunk number 13 ***; data ds2; set ds; if i1 eq 0 then drinkstat="abstinent"; if (i1 eq 1 and i2 le 3 and female eq 1) or (((i1 eq 1) or (i1 eq 2)) and i2 le 4 and female eq 0) then drinkstat="moderate"; if (((i1 gt 1) or (i2 gt 3)) and female eq 1) or (((i1 gt 2) or (i2 gt 4)) and female eq 0) then drinkstat="highrisk"; if nmiss(i1,i2,female) ne 0 then drinkstat=""; run; *** Code chunk number 14 ***; proc print data=ds2 (firstobs=365 obs=370); var i1 i2 female drinkstat; run; *** Code chunk number 15 ***; proc print data=ds2; where drinkstat eq "moderate" and female eq 1; var i1 i2 female drinkstat; run; *** Code chunk number 16 ***; proc freq data=ds2; tables drinkstat; run; *** Code chunk number 17 ***; proc freq data=ds2; tables drinkstat*female; run; *** Code chunk number 18 ***; data ds3; set ds; if female eq 1 then gender="Female"; else if female eq 0 then gender="Male"; run; proc freq data=ds3; tables female gender; run; *** Code chunk number 19 ***; proc sort data=ds; by cesd i1; run; proc print data=ds (obs=5); var id cesd i1; run; *** Code chunk number 20 ***; data females; set ds; where female eq 1; run; proc means data=females mean maxdec=1; var cesd; run; *** Code chunk number 21 ***; proc sort data=ds; by female; run; proc means data=ds mean maxdec=2; by female; var cesd; run;