0

調整されたリスクモデルに必要な 2 つの変数の欠損値の割合が高いデータセットを使用して、ネストされたケースコントロール研究でさまざまな疾患サブタイプの HR を分析しようとしています。調整されていないモデルについては、Donna Spiegelman の Subtype マクロhttps://www.hsph.harvard.edu/donna-spiegelman/software/subtype/を使用しました。

ここで、カテゴリ変数 a と b の代入データを乗算するデータセットを使用して、調整されたモデルを実行したいと考えています。私の考えは、最初に Proc MI を実行することでした:

proc mi data=Subtype nimpute=100 out=ImputSP seed=1305468 ;
class a b disease_sub infection ; 
fcs plots=trace (  std mean );
var  a  b  age disease_sub infection;
fcs discrim( a b /classeffects=include)  nbiter=100;

run;

次に、マクロ コードの 3 つの部分に「代入による」オプションを追加したサブタイプ マクロの編集バージョンを実行します。

/* get list of values of outcometype */
     proc sort data=newdatname;  by outcometype ;  run;
     proc means noprint data=newdatname;  var outcometype;
         output  out=_expblist_  mean=m_outcometype;
         by outcometype;
         where outcometype ne . ;
     run;

     data _expblist_;
        set _expblist_  end=_end_;
        call symput('_eb_'||trim(left(_n_)), trim(left(m_outcometype)));
        if _end_ then call symput ('_neb_', trim(left(_n_)));
      run;


%if &studydesign eq CACO %then %do; %let reftype=0; %end;

ods listing close;
proc logistic data=newdatname outest=LL;
by _imputation_;
    model outcometype(ref="&reftype")=&exposureND &exposureD_ &unconstrvar /link=glogit covb;

    %if &studydesign eq CACA %then %do;
        %do j=1 %to &_nexpND;

*variables for pair-wise LRT of heterogeneity test;
   
%do j=1 %to &_nexpND;
       %do i=1 %to &_neb_;
           if outcometype=&i then _expND_&j=&&_expND_&j._&i..;
       %end;
       rename _expND_&j=&&_expND_&j;
   %end;

   %do j=1 %to &_nexpD;
      %do k=1 %to &&_nexpD_&j;
          %do i=1 %to &_neb_;
             if outcometype=&i then _expD_&j._&k=&&_expD_&j._&k._&i..;
          %end;
      rename _expD_&j._&k=&&_expD_&j._&k..;

     %end;
   %end;

    %do j=1 %to &_nexpND;
    %do i=1 %to %eval(&_neb_-1);
        %do k=%eval(&i+1) %to &_neb_;
            _expND_&j._&i._vs_&j._&k.= _expND_&j*(outcometype=&&_eb_&i|outcometype=&&_eb_&k);
        %end;
    %end;
    %end;

    %do j=1 %to &_nexpD;
    %do i=1 %to %eval(&_neb_-1);
        %do k=%eval(&i+1) %to &_neb_;
             %do m=1 %to &&_nexpD_&j;
               _expD_&j._&m._&i._vs_&j._&m._&k.=_expD_&j._&m.*(outcometype=&&_eb_&i|outcometype=&&_eb_&k);
             %end;
        %end;
    %end;
    %end;
run;

%end;



ods listing close;

proc phreg data=newdatname outest=LL %if "&covs" eq "YES" %then %do; covs %end; nosummary;
        model (entrytime,time)*censoring(0)=

        %do j=1 %to &_nexpND;
          %do i=1 %to &_neb_;
             _expND_&j._&i
            %end;
        %end;
        %do j=1 %to &_nexpD;
             %do k=1 %to &&_nexpD_&j;
                  %do i=1 %to &_neb_;
                       _expD_&j._&k._&i
                   %end;
               %end;
         %end;

%if "&augmented" eq "NO" %then %do;
            %do j=1 %to &_nunconstrvar;
               %do i=1 %to &_neb_;
                _ucv_&j._&i
            %end;
         %end;
%end;

%else %if "&augmented" eq "YES" %then %do;
    &unconstrvar
%end;

      &constrvar / covb  %if "&studydesign" eq "MCACO" | "&studydesign" eq "CACO" %then %do; ties=discrete %end; ;
     %if "&studydesign" eq "COHORT" | "&studydesign" eq "CACO"  %then %do;  strata outcometype &stratavar; %end;
     %if "&studydesign" eq "MCACO" %then %do;   strata &matchid; %end;

    by _imputation_;

subtypeBY_macro を実行した後、次のコードを実行して最終的な見積もりを取得します。

proc print data=&PamEst (obs=8) ;
title "Logistic Model Coefficients First 8 Obs  ";
var _Imputation_ Variable Estimate StdErr;
run; 



TITLE "MULTIPLE IMPUTATION LOG REFRESSION-FCS";
proc mianalyze parms (classvar=ClassVal)=&PamEst  ; 
class &classmi  ;
MODELeffects &modelvar ; 
ods output ParameterEstimates=mianalyze_&PamEst;
run; 

title; 

data OR_&PamEst;
set mianalyze_&PamEst; 
OR=exp (estimate);
LCL_OR=exp (LCLMean); 
UCL_OR=exp(UCLMean);
proc print;
var parm &classmi OR LCL_OR UCL_OR;
run;

悲しいことに、プログラムは SubtypeBY ステップでクラッシュし、調整されたモデルに複数の代入を統合するための最善の方法がわかりません。どんなヒントでも大歓迎です!

4

0 に答える 0