options ls=105 nocenter; data one; * length age $5; input age @; do gender=1 to 2; do sleep = 4 to 8 by 2; input testscore @; output; end; end; cards; 1 35 72 80 45 78 90 2 34 28 60 10 32 80 ; run; proc sort data=one; by age; run; ods trace on; proc glm; class age gender sleep; model testscore=age|gender|sleep; contrast "sleep linear " sleep -1 0 1; contrast "sleep nonlinear " sleep 1 -2 1; contrast "sleep linear for young folks " sleep -1 0 1 age*sleep -1 0 1; contrast "sleep linear for older folks " sleep -1 0 1 age*sleep 0 0 0 -1 0 1; contrast "sleep nonlinear for young folks " sleep 1 -2 1 age*sleep 1 -2 1; contrast "sleep nonlinear for older folks " sleep 1 -2 1 age*sleep 0 0 0 1 -2 1; contrast "linear sleep-by-age interaction" age*sleep 1 0 -1 -1 0 1; contrast "quadratic sleep-by-age interaction" age*sleep 1 -2 1 -1 2 -1; lsmeans age*sleep; ods output modelanova=ma lsmeans=lsm contrasts=contrasts; run; data ma; set ma; fratio=3*ms/143; pvalue=1-probf(fratio,df,24); run; proc print data=ma; run; data contrasts; set contrasts; fratio=ms/143; pvalue=1-probf(fratio,df,24); run; proc print data=contrasts; run; proc print data=lsm; run; /* ODS automatically converts age and sleep to character values, so converson back to numeric is necessary */ /* numeric versions necessary for interpolation in SYMBOL statement */ data lsm; set lsm(rename=(age=a sleep=s)); age=1*a; sleep=1*s; drop a s; run; proc contents;run; symbol value=dot i=rq; proc gplot data=lsm; * by age; plot testscorelsmean*sleep=age; run; proc gplot data=lsm; * by age; plot testscorelsmean*sleep=age; run; proc glm data=one; class age gender ; model testscore=age|sleep|sleep/solution; output out=two p=p; run; symbol value=dot i=join; proc gplot data=two; title "two"; plot p*age=sleep; run;