ST 732 - SAS Code

ST 732 - SAS Code Examples

Code Comments
data one; options nodate nonumber ps=2000;
infile 'K:\wcourses\st732\dental.dat';
input obs child age dist gender;
proc glm; class age gender child;
model dist=gender child(gender) age age*gender;
random child(gender) / test;
title "Proc GLM - Split Plot Analysis of Dental Data";
data two;
title "Dental via Repeated Statement";
infile 'K:\srcis\st732\dental.dat2.txt' firstobs=2;
input child Age8 Age10 Age12 Age14 gender;
proc glm;class gender;
model age8 age10 age12 age14=gender /nouni;
repeated age 4 (8 10 12 14) polynomial/ summary printm;
title "Proc GLM with the Repeated Statement;"

Note that each line of data has 4 values

data two;
title "Dental via Repeated Statement";
infile 'K:\srcis\st732\dental.dat2.txt' firstobs=2;
input child Age8 Age10 Age12 Age14 gender;
proc glm;class gender;
model age8 age10 age12 age14=gender/nouni;
manova h=gender;
title "Manova of Dental data";

Note that each line of data has 4 values

data one;
infile 'K:\wcourses\st732\dental.dat';
input obs child age dist gender;
proc mixed;class gender child age;
model dist=gender age gender*age;
repeated / type=cs subject=child r rcorr;
* repeated / type=cs subject=child(gender) r rcorr;
title "Proc Mixed - Split Plot Analysis of Dental Data";

use "child(gender)" if child id's are not unique

data one;
infile 'K:\wcourses\st732\dental.dat';
input obs child age dist gender;
proc mixed;class gender child age;
model dist=gender age gender*age;
random intercept/subject=child(gender);
* random child(gender);
title "Proc Mixed - Split Plot - Random Effect Version";

Random effects version of the split plot analysis using
"random" statement rather than "repeated."
"random child(gender)" is equivalent code.

data one;
infile 'K:\wcourses\st732\dental.dat';
input obs child age dist gender;
proc mixed;class gender child age;
model dist=gender age gender*age;
random intercept/subject=child(gender);
repeated / type=ar(1) subject=child(gender)
     group=gender r rcorr=1,12;
title "Proc Mixed - Split Plot - Random Effect Version";

Random effects version with additional "repeated"
statement to add different ar(1) correlations to
males and females.

data one;
infile 'K:\wcourses\st732\dental.dat';
input obs child age dist gender;
proc mixed;class gender child;
model dist=gender gender*age / noint solution;
* model dist=gender age gender*age /solution;
repeated / type=cs subject=child r rcorr;
* repeated / type=csh group=gender subject=child r rcorr;
title "Linear in Age, explicit slopes";

* 2nd model gives "difference parameterization"
* type=csh would give unequal variances
* group=gender would give different cov by group
* type=un would give unstructured
* type=ar(1) would give ar(1) for equally spaced age
* type=sp(pow)(age) would give ar(1) for unequally spaced

data one;
infile 'K:\wcourses\st732\dental.dat';
input obs child age dist gender;
proc mixed;class gender child;
model dist=gender gender*age/ noint solution;
random intercept age / type=un subject=child g gcorr v=1,17 vcorr=1,17;
repeated / group=gender subject=child r=1,17 rcorr=1,17;
estimate 'diff in mean slope' gender*age 1 -1;
contrast 'overall gender diff' gender 1 -1, gender*age 1 -1;
title "Random Intercept and Slope for Dental Data";

repeated with group=gender gives different
variances for independent errors

data hips;
infile 'K:\srcis\st732\hips\hips.dat.txt';
input patient gender age week h;
week2=week**2;
time=week;
proc mixed data=hips;
class patient time gender;
model h = gender gender*week gender*week2/ noint solution corrb;
repeated time / type =ar(1) subject=patient rcorr;
contrast 'equal slopes' gender 0 0 gender*week 1 -1 gender*week2 0 0;
contrast 'equal quad slopes' gender 0 0 gender*week 0 0 gender*week2 1 -1;
title "Hips Data with equal spacing but missing data";
data ultra;
infile 'K:\srcis\st732\ultra\ultra.dat.txt';
input subject tmp ufr center;
* rescale the pressures;
tmp=tmp/100;
proc mixed data=ultra;class subject center;
model ufr = center center*tmp / noint solution covb;
random intercept tmp / type=un subject=subject g gcorr v vcorr;
* repeated / subject=subject r rcorr;
contrast '1 vs 2' center*tmp 1 -1 0;
contrast '1 vs 3' center*tmp 1 0 -1;
contrast '2 vs 3' center*tmp 0 1 -1;
title "Ultra Data with random intercept and slope";

* repeated statement not needed, diagonal
cov errors are default. However,
repeated /type=sp(pow)(tmp) subject=subject r rcorr;
would add ar(1) structure instead of independent errors.

data ultra;
infile 'K:\srcis\st732\ultra\ultra.dat.txt';
input subject tmp ufr center;
* rescale the pressures;
tmp=tmp/100;
tmp2=tmp**2;
proc mixed data=ultra;class subject center;
model ufr = center center*tmp center*tmp2 / noint solution;
repeated / type = sp(pow)(tmp) subject=subject r rcorr;
title "Ultra Data with ar structure with unequal spacing";
data pdat;
infile 'K:\wcourses\st732\press.dat';
input id time press weight age prev diet;
prevdiet="00";
if prev=0 and diet=1 then prevdiet="01";
if prev=1 and diet=0 then prevdiet="10";
if prev=1 and diet=1 then prevdiet="11";
proc mixed data=pdat;class id prevdiet;
model press = age prev time*prevdiet / solution ddfm=kr;
random intercept time / type=un subject=id g gcorr v vcorr;
contrast 'slope diff. prev' time*prevdiet 1 1 -1 -1;
contrast 'slope diff. diet' time*prevdiet 1 -1 1 -1;
Makes one-way factor out of 2 by 2 factorial.
All 4 slopes are printed, noint option not required.
ddfm=kr is the usual preferred option for F approximations.
measurements are at different time values for each person.