Avatar billede ole8 Nybegynder
01. marts 2008 - 20:44 Der er 1 kommentar

Hvordan finder jeg makroer til SAS

Er der nogen der ved det og jeg mangler Bartlett test. Nogen der overhovedet kan SAS herinde? Det er et program til databehandling af statistiske data.
Avatar billede stefanfuglsang Juniormester
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;
  */
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester