*******************************************************************;

* Programme basique ACP avec graphique                            *;

* Pierre DESMET Décembre 2012                                     *;

* Traitement des dépenses de communication par secteur d'acticvité*;

*******************************************************************;

 

Options nocenter formdlim="-" ;

Data in ;

       length ID $ 13 ;

       input ID $ services distribution B_to_B B_to_C  ;

       total =    services+distribution+B_to_B+B_to_C ;

cards ;

TV 1109 217 105 2681

Cinéma 59 5 3 50

Radio 398 264 38 221

Internet 489 195 80 243

Presse 2012 696 438 1101

Annuaires 785 189 290 22

Affichage 615 272 17 551

Mark_Direct 4149 1208 1903 2299

Promotion 1285 1317 317 2187

salons_Foires 844 54 456 185

Mecenat_Spons 590 60 242 294

Rel_Publiques 930 79 516 308

;

run ;

 

* MACRO Graphique Variables sur data= out_variable *************;

%Macro graphiqueV (data= &data,  x=&X, y=&Y, XL=&XL, YL=&YL, ID=&ID, titre = &titre) ;

axis1 length= 24 cm; axis2 length= 24 cm; symbol1 V=none interpol=none;

data out_variable ; set &data; if _TYPE_='SCORE'; run ;

proc transpose data=&data out=t_variable ;run ; proc print data=t_variable ; run ;

data work; set t_variable ; keep X Y Xsys Ysys text size  color; X=&X ; Y=&Y; text=&ID ; color='black' ;

size=1; xsys='2'; ysys='2'; Label  Y=&YL X=&XL; run; proc gplot data=work; title4 &titre ;

plot Y*X=1 / haxis=axis1 vaxis=axis2 annotate=work Frame Href=0 Vref=0; run;

%Mend  graphiqueV ;

* Macro Graphique Individus sur data= out_individu *************;

%Macro graphiqueI (data= &data, x=&X, y=&Y, XL=&XL, YL=&YL, ID=&ID, titre = &titre,

                                  red=&red, blue=&blue, green=&green ) ;

axis1 length= 24 cm; axis2 length= 24 cm; symbol1 V=none interpol=none;

data work ; set &data ; keep X Y Xsys Ysys text size color ; X=&x ; Y=&y; text=&ID ; color='black' ;

if text=&red then color='RED' ;if text=&blue then color='BLUE';if text=&green then color='GREEN' ;

size=1; xsys='2'; ysys='2';Label  Y=&YL X=&XL; run; proc gplot data=work;

plot Y*X=1 / haxis=axis1 vaxis=axis2 annotate=work Frame Href=0 Vref=0; run;

%Mend  graphiqueI ;

 

*---------------------------------------------------------------*;

Title4 "Dépenses de communication selon les secteurs d'activité" ;

*---------------------------------------------------------------*;

proc tabulate data=in ;

       class  id ;

       var              services distribution B_to_B B_to_C total ;

       table (id all), (services distribution B_to_B B_to_C total)*sum*F=6.0 ;

       run ;

 

*---------------------------------------------------------------*;

Title4 "Corrélations" ;

*---------------------------------------------------------------*;

proc corr data = in ;

var services distribution B_to_B B_to_C ;

run ;

 

ODS graphics on ;

*---------------------------------------------------------------*;

Title4 "ACP sans rotation" ;

*---------------------------------------------------------------*;

proc factor data=in plot =(scree loadings)

       MSA CORR reorder

       method=prin priors = one

       N = 2 out    = out_individu

             outstat= out_variable ;

       var services distribution B_to_B B_to_C ; /* mettre ici les variables */

       run ;

 

Title4 "Data out_individu" ;

*-------------------------*;

proc print data=out_individu;run ;

 

Title4 "Data out_variable" ;

*-------------------------*;

proc print data=out_variable;run ;

 

 

%graphiqueV(data= out_variable,   x=factor1, y=factor2, XL="Services", YL="B_to_C",

                    ID=_name_ , titre= "premier plan factoriel Variables (colonnes)" )  ;

%graphiqueI( data= out_individu, x=factor1, y=factor2, XL="Services", YL="B_to_C",

                    ID=ID, titre="premier plan factoriel Individus (lignes)",

                    red= "Mark_Direct", blue=., green =.) ;

 

*---------------------------------------------------------------*;

Title4 "ACP avec rotation" ;

*---------------------------------------------------------------*;

ODS graphics on ;

PROC FACTOR DATA=in

       Plot = (SCREE                     /* demande de l'éboulis */

       initloadings loadings)            /* graphiques des variables avant eta près rotation */

       CORR                              /* sur corrélations ou COV covariance */

       SIMPLE                            /* statistiques descriptives des variables */

       MSA                               /* test d’adéquation KMO, Bartlett*/

       METHOD=PRIN         PRIORS=ONE   /* ACP */

/*     MINEIGEN=1   */                  /* critère de Kaiser valeur propres >1 */

       ROTATE= Varimax  Reorder          /* rotation orthogonale, tri par importance décroissante  */

                                        /* ou promax = rotation oblique */

       FLAG=.32                          /* identification des loadings > à cette valeur */

       NFACT= 2                          /* choix du nombre de facteurs, obligatoire si OUT = */

       OUT =        out_individu        /* sortie d'un data avec les facteurs factor1, factor2, */

       OUTSTAT =    out_variable ;             /* sortie d'un data avec les variables */

       VAR services distribution B_to_B B_to_C; /* variables à analyser */

RUN;

 

 

Title4 "Data out_individu" ;

*-------------------------*;

proc print data=out_individu;run ;

 

Title4 "Data out_variable" ;

*-------------------------*;

proc print data=out_variable;run ;

 

 

%graphiqueV(data= out_variable,   x=factor1, y=factor2, XL="B_to_B", YL="B_to_C",

                    ID=_name_ , titre= "premier plan factoriel Variables (colonnes)" )  ;

%graphiqueI(data= out_individu, x=factor1, y=factor2, XL="B_to_B", YL="B_to_C",

                    ID=ID, titre="premier plan factoriel Individus (lignes)",

                    Red=".", Blue= ".", green =".") ;

 

* exemple avec un filtre couleur ;

%graphiqueI(data= out_individu, x=factor1, y=factor2, XL="B_to_B", YL="B_to_C",

                    ID=ID, titre="premier plan factoriel Individus (lignes)",

                    Red="Mark_Direct", Blue= ".", green ="." ) ;