This
is a SAS macro to do a tri-variate binary outcomes regression, which is a
special case of a simultaneous regression of three dichotomous outcomes.
/*THIS
IS gl0014011_pneed14.prg*/
OPTIONS
PS=70
LS=120;
libname
k 'e:\n01\Paradox.of.need.paper';
%let
program=GL001401.sas;
data
k;
SET
k.bjsparadox;
intercept=1;
if
satis2 gt .Z
then do;
if
satis2=1 then
satis21=1; else
satis21=0;
if
satis2=2 then
satis22=1; else
satis22=0;
if
satis2=3 then
satis23=1; else
satis23=0;
end;
if
pneed1=1 or
pneed4=1 then
pneed_14=1;
else
if pneed1 ne
1 and pneed1 gt
.Z and pneed4 ne
1 and pneed4 gt
.Z then pneed_14=0;
keep
intercept nml_wt name2 probvis clean checkup BROKfill BROKtoot cavit loose
caploos
T1_RTIP
T1_MBLE acheabs satis2 SATIS21 satis22 satis23 PNEED1 PNEED2 PNEED3 PNEED4
cra
ira ipoa RACE gender rr_frust able_2 able_3 TIME pneed_14;
run;
%let
covlist=intercept BROKfill BROKtoot cavit loose caploos
T1_RTIP
T1_MBLE acheabs SATIS21 satis22 satis23 PNEED1 PNEED2 PNEED3 PNEED4
cra
ira ipoa RACE gender rr_frust able_2 able_3 TIME pneed_14;
%macro
creat_design_matrix(resp,outc,numbresp,numbcovs);
resp=&resp; outc=&outc;
%do
i=1 %to &numbresp;
%if
&i=&resp %then %do;
%do
j=1 %to &numbcovs;
%let
var=%scan(&covlist,&j);
&var.&resp
=&var;
%end;
%end;
%else %do;
%do k=1
%to &numbcovs;
%let
cov=%scan(&covlist,&k);
&cov.&i=0;
%end;
%end;
%end;
output;
%mend;
data
k2; set k;
%creat_design_matrix(1,probvis,3,26);
%creat_design_matrix(2,clean,3,26);
%creat_design_matrix(3,checkup,3,26);
run;
%macro
covs(numbresp);
%do
j=1 %to &numbresp;
%do
i=1 %to &numbcovs;
%let
covar=%scan(&covlist,&i);
&covar.&j
%end;
%end;
%mend;
%let
covlist1=intercept BROKfill BROKtoot cavit loose caploos
T1_rtip t1_mble acheabs SATIS21
satis22 satis23 PNEED2 cra ira ipoa RACE
gender rr_frust able_2 able_3 TIME;
%let
covlist2=intercept BROKfill BROKtoot cavit loose caploos
t1_rtip T1_MBLE acheabs SATIS21
satis22 satis23 pneed4 cra ira ipoa RACE
gender rr_frust able_2 able_3 TIME;
%let
covlist3=intercept BROKfill BROKtoot cavit loose caploos
t1_rtip T1_mble acheabs SATIS21
satis22 satis23 PNEED1 cra ira ipoa RACE
gender rr_frust able_2 able_3 TIME;
%macro
covs(numbcovs,covlist,resp);
%do
i=1 %to &numbcovs;
%let covar=%scan(&covlist,&i);
&covar.&resp
%end;
%mend;
%macro
binomial_repeated_modeling;
proc
genmod;
weight nml_wt;
class name2 time1 time2 time3;
model outc= %covs(22,&covlist1,1)
%covs(22,&covlist2,2)
%covs(22,&covlist3,3)
/noint dist=bin link=logit noint;
repeated subject=name2/type=un;
run;
%mend;
%binomial_repeated_modeling;