/* macro used to obtain recycled predictions */
%macro respect();
TITLE "Present PROC REG/STB estimates"; run;
proc reg data=lib.&ds;
model &outcome = &recycle &adjust /stb;
run;
/** Approach #1 - fix all indpendent variables other than the condition
being predicted at the sample means **/
TITLE "Approach #1: GLM, estimates, and LSmeans follow.."; run;
* get number of recycling variables;
%let num_recv=%sysfunc(countw(&recycle));
proc glm data=lib.&ds;
class &recycle;
model &outcome = &recycle &adjust;
%do i = 1 %to &num_recv;
%do j = 1 %to &num_recv;
/* use this form instead to cut out redundant terms: %do j = 1 %to &num_recv -1; */
%if &i ne &j %then %do;
%let nv1 = %scan(&recycle, &i); /* nv1: 1st variable to estimate */
%let nv2 = %scan(&recycle, &j); /* nv2: 2nd variable to estimate */
estimate "&nv1 vs &nv2" &nv1 -1 1 &nv2 1 -1 ; /* estimate cross-products */
%end;
%end;
estimate "&nv1" &nv1 -1 1; /* get point estimate for NV1 */
%end;
lsmeans &recycle /om stderr;
run;
quit;
/***********************************************************************/
/** Approach #2: pick one condition and fix all other recycling vars to
zero (keep adjusting vars at mean) **/
/* get 0's for use in building lsmeans statement in GLM (one less than total
number of recycling vars */
%let zeros = ;
%do k = 1 %to %eval(&num_recv -1);
%let zeros = &zeros 0 ;
%end;
/** build a GLM for each recycling variable **/
%do ii = 1 %to &num_recv;
/** initialize item you're keying in on (keyvar) and drop it from list
of (remain)ing recycling vars for use in building GLM **/
%let keyvar =;
%let remain =;
%let keyvar = %scan(&recycle, &ii);
%do jj = 1 %to &num_recv;
%if &ii ne &jj %then %do;
%let remain = &remain %scan(&recycle, &jj);
%end;
%end;
TITLE1 "Approach #2: pick one condition (&keyvar) and fix all other";
TITLE2 "recycling vars to zero (keep adjusting vars at mean)"; run;
proc glm data=lib.&ds;
class &keyvar;
model &outcome = &recycle &adjust;
lsmeans &keyvar
/at ( &remain ) =
( &zeros ) out=ls_remain;
run;
%end;
%mend;