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;