01. marts 2008 - 21:16
#1
Næ, men google kan bruges til mange ting;
søg på bartlett test sas , jeg fik f.eks. følgende
%macro Bartlett(data=_last_,var=,gruppe=,bygruppe=_ingen,tabel=ja);
/****************************************************************/
/* */
/* Laver Bartletts test for varianshomogenitet for variablen */
/* "var" over grupperne givet ved klassifikationsvariablen */
/* "gruppe" for hvert niveau af "bygruppe"-variablen. */
/* */
/* Grupper med ens observationer eller med et antal ikke- */
/* manglende observationer mindre end 2 ekskluderes fra testet */
/* (men relevant statistik beregnes alligevel). */
/* */
/* Af hensyn til plads i udskriften tilrådes det, at "gruppe"- */
/* variablen enten er numerisk eller højst består af 2 tegn. */
/* */
/* Datasettet "_bartlet" indeholder næsten alle de udskrevne */
/* værdier. */
/* */
/* Reference: */
/* Preben Blaesild & Jqrgen Granfeldt: */
/* Noter til Biostatistik og Geostatistik, */
/* 1994 */
/* */
/* Jørn Attermann 19-01-94, 14-04-94, 08-06-94 */
/* */
/* Modificeret af Asger Roer Pedersen 21-02-96. */
/* */
/****************************************************************/
data _mact1;
set &data;
_ingen=1;
run;
proc sort data=_mact1;
by &bygruppe &gruppe;
run;
proc summary data=_mact1;
by &bygruppe &gruppe;
var &var;
output out=_mact2 n=_ni sum=_Si USS=_USSi mean=_meani;
run;
data _bartlet;
set _mact2;
by &bygruppe;
retain _n _S _USS _CT _SSD _f _s_invfi _s_flns _k . _ekskl 0;
if first.&bygruppe then do;
_n=.;
_S=.;
_USS=.;
_CT=.;
_SSD=.;
_f=.;
_s_invfi=.;
_s_flns=.;
_k=.;
_ekskl=0;
end;
if (_ni>0) then _CTi=_Si**2/_ni; else _CTi=.;
_SSDi=_USSi-_CTi;
_fi=_ni-1;
if ((not (_fi<1)) and (_SSDi>0)) then do;
_vari=_SSDi/_fi;
_s_invfi+1/_fi;
_s_flns+_fi*log(_vari);
_k+1;
end;
else do;
_ekskl+1;
_fi=0;
_vari=.;
end;
_n+_ni;
_S+_Si;
_USS+_USSi;
_CT+_CTi;
_SSD+_SSDi;
_f+_fi;
if last.&bygruppe then do;
_var=_SSD/_f;
if (_k>1) then do;
_C=1+1/3/(_k-1)*(_s_invfi-1/_f);
_2lnQ=_f*log(_var)-_s_flns;
_Ba=_2lnQ/_C;
_testss=1-probchi(_Ba,_k-1);
end;
end;
/* put / @33 'Macro "BARTLETT"';
put / @33 "Dataset: %upcase(&data)";
put @25 "Responsvariabel: %upcase(&var)";
put @26 "Gruppevariabel: %upcase(&gruppe)"; */
/* put @24 "Bygruppevariabel: %upcase(&bygruppe)"; */
/*
put // @33 "&bygruppe = " @44 _bychar $28.;
put ' ____________________________________________________';
%end;
*/
%if &tabel=ja %then %do;
file print;
if (_n_=1) then do;
put / @10 'Macro "BARTLETT"' " Dataset: %upcase(&data)";
put @14 "Responsvariabel : %upcase(&var) Gruppevariabel : %upcase(&gruppe)";
%if (not (&bygruppe=_ingen)) %then %do;
put @14 "Bygruppevariabel : %upcase(&bygruppe)";
%end;
end;
if first.&bygruppe then do;
%if (not (&bygruppe=_ingen)) %then %do;
_bychar=trim(left(&bygruppe));
put / @10 "&bygruppe = " _bychar $28.;
put ' _________________________________________________________________';
%end;
put / @10 'Beregningsskema:';
put @1 'i' @12 'ni' @22 'Si' @32 'USSi' @42 'Si2/ni' @54 'SSDi'
@60 'fi' @68 'Var' @79 'Mean' ;
end;
_grpchar=trim(left(&gruppe));
put @1 _grpchar $8. @11 _ni 3.0 @18 _Si 10.4 @28 _USSi 10.4 @38 _CTi 10.4
@50 _SSDi 10.4 @59 _fi 3.0 @65 _vari 7.4 @76 _meani 7.4;
if last.&bygruppe then do;
put '----------------------------------------------------------------------------';
put @9 _n 5.0 @18 _S 10.4 @28 _USS 10.4 @38 _CT 10.4
@49 _SSD 10.4 @59 _f 3.0 @65 _var 7.4;
put / @10 'Bartletts test:' @33 'C' @41 '-2logQ' @55 'B' @66 'p' ;
put @ 29 _C 10.5 @38 _2lnQ 10.5 @51 _Ba 10.5 @62 _testss 10.5;
/* put / @10 'Bartletts test:';
put @23 'C' @31 '-2logQ' @45 'B' @56 'p' ;
put @ 17 _C 10.5 @28 _2lnQ 10.5 @39 _Ba 10.5 @50 _testss 10.5; */
if (_ekskl>0) then do;
put /// @5 'NB: ' _ekskl ' gruppe(r) ekskluderet fra testet.';
end;
end;
%end;
/* SH mod */
%if &tabel=short %then %do;
file print;
if (_n_=1) then do;
put / @10 'Macro "BARTLETT"' " Dataset: %upcase(&data)";
put @14 "Responsvariabel : %upcase(&var) Gruppevariabel : %upcase(&gruppe)";
%if (not (&bygruppe=_ingen)) %then %do;
put @14 "Bygruppevariabel : %upcase(&bygruppe)";
%end;
end;
if first.&bygruppe then do;
%if (not (&bygruppe=_ingen)) %then %do;
_bychar=trim(left(&bygruppe));
put / @10 "&bygruppe = " _bychar $28.;
put ' _________________________________________________________________';
%end;
put @10 'Samlede størrelser:';
put @12 'ni' @22 'Si' @32 'USSi' @42 'Si2/ni' @54 'SSDi' @60 'fi' @68 'Var' ;
end;
_grpchar=trim(left(&gruppe));
if last.&bygruppe then do;
put @9 _n 5.0 @18 _S 10.4 @28 _USS 10.4 @38 _CT 10.4
@49 _SSD 10.4 @59 _f 3.0 @65 _var 7.4;
put / @10 'Bartletts test:' @33 'C' @41 '-2logQ' @55 'B' @66 'p' ;
put @ 29 _C 10.5 @38 _2lnQ 10.5 @51 _Ba 10.5 @62 _testss 10.5;
if (_ekskl>0) then do;
put /// @5 'NB: ' _ekskl ' gruppe(r) ekskluderet fra testet.';
end;
end;
%end;
/* SH mod */
keep %if (not (&bygruppe=_ingen)) %then %do; &bygruppe %end;
&gruppe _ni _n _Si _S _USSi _USS _CTi _CT _SSDi _SSD _fi _f _vari _var
_meani _C _Ba _2lnQ _testss;
run;
%mend;
/* put '----------------------------------------------------------------------------'; */
/*
put @1 _grpchar $8. @11 _ni 3.0 @18 _Si 10.4 @28 _USSi 10.4 @38 _CTi 10.4
@50 _SSDi 10.4 @59 _fi 3.0 @65 _vari 10.6 @76 _meani 10.4;
*/