options ls=79 ps=200; data species; infile 'species.dat' firstobs=2; input ploidy species $ cross $ access plant tr1 tr2 tr3; /* the following only uses proc glm -- better to use proc mixed */ /* approximate handling of fixed effects by working with means */ proc sort; by ploidy species cross; proc means noprint; by ploidy species cross; var tr1; output out = fixed mean = mtr1 n = ntr1; proc glm data = fixed; class ploidy species; model mtr1 = ploidy species(ploidy) / solution; lsmeans ploidy species(ploidy) / stderr; proc glm data = fixed; class ploidy species; model mtr1 = ploidy species(ploidy) / solution; weight ntr1; lsmeans ploidy species(ploidy) / stderr; /* look at random effects only for species strigosa */ data strigosa; set species; if ploidy = 2; proc glm data = strigosa; class ploidy species cross access plant; model tr1 = cross access(cross); random cross access(cross) / test; estimate 'strigosa' intercept 1; lsmeans cross access(cross) / stderr; /* full (but approximate) handling of nested model */ proc glm data = species; class ploidy species cross access plant; model tr1 = ploidy species(ploidy) cross(ploidy*species) access(cross*ploidy*species); random cross(ploidy*species) access(cross*ploidy*species) / test; estimate 'grand mean' intercept 1; lsmeans ploidy species(ploidy) / stderr;