options ls=95 nodate; data diets; length trt $19.; input trt $ wtgain; cards; Control 4.1 Control 3.3 Control 3.1 Control 4.2 Control 3.6 Control 4.4 Control+level-1-A 5.2 Control+level-1-A 4.8 Control+level-1-A 4.5 Control+level-1-A 6.8 Control+level-1-A 5.5 Control+level-1-A 6.2 Control+level-2-A 6.3 Control+level-2-A 6.5 Control+level-2-A 7.2 Control+level-2-A 7.4 Control+level-2-A 7.8 Control+level-2-A 6.7 Control+level-1-B 6.5 Control+level-1-B 6.8 Control+level-1-B 7.3 Control+level-1-B 7.5 Control+level-1-B 6.9 Control+level-1-B 7 Control+level-2-B 9.5 Control+level-2-B 9.6 Control+level-2-B 9.2 Control+level-2-B 9.1 Control+level-2-B 9.8 Control+level-2-B 9.1 run; proc glm; class trt; /*watch ordering in CLASS LEVEL INFO in output*/ model wtgain=trt; contrast "theta_a:control - avg(others)" trt 4 -1 -1 -1 -1; contrast "theta_b:(A-B)_1 - (A-B)_2" trt 0 1 -1 -1 1; contrast "theta_c:A-B" trt 0 1 -1 1 -1; contrast "theta_c:1-2" trt 0 1 1 -1 -1; run; data diets; set diets; control=(trt="Control"); if (control=0) then do; additive=(substr(trt,17,1)); amount=(substr(trt,15,1)); /* SUBSTR plucks the 15th char from the string and writes it to "amount"*/ end; else do; additive="n"; amount="n"; end; run; proc glm; class control additive amount; model wtgain=control additive(control) amount(control) additive*amount(control) ; lsmeans additive*amount(control); run;