ST 732 - SAS Code> <H1 align="center">ST 732 - SAS Code Examples</H1> <p> <table border cellspacing=0 cellpadding=5> <!-- <caption align=bottom>Kumquat versus a poked eye, by gender</caption> <tr> <td colspan=2 rowspan=2></td> <th colspan=2 align=center>From Previous ST370 Classes</th> </tr> --> <tr> <th>Code</th> <th>Comments</th> </tr> <tr><td> data one; options nodate nonumber ps=2000; <br> infile 'K:\wcourses\st732\dental.dat'; <br> input obs child age dist gender; <br> proc glm; class age gender child; <br> model dist=gender child(gender) age age*gender; <br> random child(gender) / test; <br> </td> <td>title "Proc GLM - Split Plot Analysis of Dental Data"; </td> </tr> <tr><td> data two; <br> title "Dental via Repeated Statement"; <br> infile 'K:\srcis\st732\dental.dat2.txt' firstobs=2; <br> input child Age8 Age10 Age12 Age14 gender; <br> proc glm;class gender; <br> model age8 age10 age12 age14=gender /nouni; <br> repeated age 4 (8 10 12 14) polynomial/ summary printm; <br> </td> <td>title "Proc GLM with the Repeated Statement;"<br><p> Note that each line of data has 4 values </td> </tr> <tr><td> data two; <br> title "Dental via Repeated Statement"; <br> infile 'K:\srcis\st732\dental.dat2.txt' firstobs=2; <br> input child Age8 Age10 Age12 Age14 gender; <br> proc glm;class gender; <br> model age8 age10 age12 age14=gender/nouni; <br> manova h=gender; <br> </td> <td>title "Manova of Dental data";<p> Note that each line of data has 4 values </td> </tr> <tr><td> data one; <br> infile 'K:\wcourses\st732\dental.dat'; <br> input obs child age dist gender; <br> proc mixed;class gender child age; <br> model dist=gender age gender*age; <br> * repeated / type=cs subject=child r rcorr; <br> repeated age / type=cs subject=child(gender) r rcorr; <br> </td> <td>title "Proc Mixed - Split Plot Analysis of Dental Data"; <br><p> use "child(gender)" if child id's are not unique <br> use "repeated age" if data not ordered <br>by age within child </td> </tr> <tr><td> data one; <br> infile 'K:\wcourses\st732\dental.dat'; <br> input obs child age dist gender; <br> proc mixed;class gender child age; <br> model dist=gender age gender*age; <br> random intercept/subject=child(gender); <br> * random child(gender); <br> </td> <td>title "Proc Mixed - Split Plot - Random Effect Version"; <br><p> Random effects version of the split plot analysis using <br> "random" statement rather than "repeated." <br> "random child(gender)" is equivalent code. <br> </td> </tr> <tr><td> data one; <br> infile 'K:\wcourses\st732\dental.dat'; <br> input obs child age dist gender; <br> proc mixed;class gender child age; <br> model dist=gender age gender*age; <br> random intercept/subject=child(gender); <br> repeated / type=ar(1) subject=child(gender) <br>      group=gender r rcorr=1,12; <br> </td> <td>title "Proc Mixed - Split Plot - Random Effect Version"; <br><p> Random effects version with additional "repeated" <br> statement to add different ar(1) correlations to <br> males and females. </td> </tr> <tr><td> data one; <br> infile 'K:\wcourses\st732\dental.dat'; <br> input obs child age dist gender; <br> proc mixed;class gender child; <br> model dist=gender gender*age / noint solution; <br> * model dist=gender age gender*age /solution; <br> repeated / type=cs subject=child r rcorr; <br> * repeated / type=csh group=gender subject=child r rcorr; <br> </td> <td>title "Linear in Age, explicit slopes"; <br><p> * 2nd model gives "difference parameterization" <br> * type=csh would give unequal variances <br> * group=gender would give different cov by group <br> * type=un would give unstructured<br> * type=ar(1) would give ar(1) for equally spaced age <br> * type=sp(pow)(age) would give ar(1) for unequally spaced </td> </tr> <tr><td> data one; <br> infile 'K:\wcourses\st732\dental.dat'; <br> input obs child age dist gender; <br> proc mixed;class gender child; <br> model dist=gender gender*age/ noint solution; <br> random intercept age / type=un subject=child g gcorr v=1,17 vcorr=1,17; <br> repeated / group=gender subject=child r=1,17 rcorr=1,17; <br> estimate 'diff in mean slope' gender*age 1 -1; <br> contrast 'overall gender diff' gender 1 -1, gender*age 1 -1; <br> </td> <td>title "Random Intercept and Slope for Dental Data"; <br><p> repeated with group=gender gives different <br> variances for independent errors</td> </tr> <tr><td> data hips; <br> infile 'K:\srcis\st732\hips\hips.dat.txt'; <br> input patient gender age week h; <br> week2=week**2; <br> time=week; <br> proc mixed data=hips; <br> class patient time gender; <br> model h = gender gender*week gender*week2/ noint solution corrb; <br> repeated time / type =ar(1) subject=patient rcorr; <br> contrast 'equal slopes' gender 0 0 gender*week 1 -1 gender*week2 0 0; <br> contrast 'equal quad slopes' gender 0 0 gender*week 0 0 gender*week2 1 -1; <br> </td> <td>title "Hips Data with equal spacing but missing data";</td> </tr> <tr><td> data ultra; <br> infile 'K:\srcis\st732\ultra\ultra.dat.txt'; <br> input subject tmp ufr center; <br> * rescale the pressures; <br> tmp=tmp/100; <br> proc mixed data=ultra;class subject center; <br> model ufr = center center*tmp / noint solution covb; <br> random intercept tmp / type=un subject=subject g gcorr v vcorr; <br> * repeated / subject=subject r rcorr; <br> contrast '1 vs 2' center*tmp 1 -1 0; <br> contrast '1 vs 3' center*tmp 1 0 -1; <br> contrast '2 vs 3' center*tmp 0 1 -1; <br> </td> <td>title "Ultra Data with random intercept and slope";<br><p> * repeated statement not needed, diagonal <br> cov errors are default. However,<br> repeated /type=sp(pow)(tmp) subject=subject r rcorr; <br> would add ar(1) structure instead of independent errors. </td> </tr> <tr><td> data ultra; <br> infile 'K:\srcis\st732\ultra\ultra.dat.txt'; <br> input subject tmp ufr center; <br> * rescale the pressures; <br> tmp=tmp/100; <br> tmp2=tmp**2; <br> proc mixed data=ultra;class subject center; <br> model ufr = center center*tmp center*tmp2 / noint solution; <br> repeated / type = sp(pow)(tmp) subject=subject r rcorr; <br> </td> <td>title "Ultra Data with ar structure with unequal spacing";<br> </td> </tr> <tr><td> data pdat; <br> infile 'K:\wcourses\st732\press.dat'; <br> input id time press weight age prev diet; <br> prevdiet="00"; <br> if prev=0 and diet=1 then prevdiet="01"; <br> if prev=1 and diet=0 then prevdiet="10"; <br> if prev=1 and diet=1 then prevdiet="11"; <br> proc mixed data=pdat;class id prevdiet; <br> model press = age prev time*prevdiet / solution ddfm=kr; <br> random intercept time / type=un subject=id g gcorr v vcorr; <br> contrast 'slope diff. prev' time*prevdiet 1 1 -1 -1; <br> contrast 'slope diff. diet' time*prevdiet 1 -1 1 -1; <br> </td> <td>Makes one-way factor out of 2 by 2 factorial. <br> All 4 slopes are printed, noint option not required. <br> ddfm=kr is the usual preferred option for F approximations.<br> measurements are at different time values for each person.</td> </tr> <tr><td></td> <td></td> </tr> </table> <br> <br> <br> <br> <br> <br> <br> <br> <br>