IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SAS STAT Discussion :

Ajouter des variables supplémentaires pour une acp


Sujet :

SAS STAT

  1. #1
    Responsable SAS


    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Points : 16 219
    Points
    16 219
    Par défaut Ajouter des variables supplémentaires pour une acp
    Bonjour,
    Je voudrais savoir si SAS permet l'ajout de variables supplémentaires pour les acp. J'ai regardé la synthaxe de la proc princomp mais je ne vois rien.
    Si quelqu'une à une idée ou vu une marco permettant de tels ajouts je suis très intéressé.
    Merci
    Les balises code
    FAQ SAS
    Rubrique SAS

    Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.

  2. #2
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 60
    Points : 55
    Points
    55
    Par défaut
    Salut,
    ceci est une macro qui permet de faire de l'ACP, tu as qu'à rajouter les variables que tu veux dans listev...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    %macro acp(dataset, ident, listev, red=,q=3,poids=);
    %* Acp de dataset ;
    %*          ident : variable contenant les identificateurs;
    %*                  des individus;
    %*        listev : liste des variables (numeriques);
    %*     par defaut : reduites sinon red=cov;
    %*              q : nombre de composantes retenues;
    %*          poids : variable de ponderation;
    %*          pvar  : nombre de variables ;
    %* options  edition;
    %global pvar;
    options linesize=80 pagesize=66 nonumber nodate;
    title "A.c.p. des donnees de &dataset";
    footnote;
     
    data donnees (keep=ident poids &listev);
    set sasuser.&dataset nobs=nn;
    retain spoids 0;
    %if %length(&poids) ne 0 %then %str(poids = &poids;);
                             %else %str(poids=1;);
    spoids=spoids+poids;
    ident=&ident;
    if _n_=nn then call symput('spoids',spoids);
    run;
     
    proc princomp data=donnees noprint
                  outstat=eltpr out=compr
                  vardef=weight &red;
     weight poids;
     var &listev;
    run;
     
    %* nettoyage des resultats;
    data tlambda (drop=_type_)
         tvectp (drop=_type_)
         sigma (drop=_type_)
         statel;
    set eltpr;
    select (_type_);
    when ('EIGENVAL') do;
             _name_ = 'lambda';
             output tlambda;
             end;
    when ('CORR','COV')  output sigma;
    when ('SCORE')       output tvectp;
    otherwise output statel;
    end;
    run;
     
    proc print data=statel noobs round;
    title3 'Statistiques elementaires';
    run;
    title;
    proc print data=sigma noobs round;
    title2 'Matrice des covariances ou des correlations';
    run;
     
    data lambda (keep=k lambda pctvar cumpct);
    set tlambda (drop= _name_) ;
    array l{*} _numeric_;
    tr=sum(of l{*});
    cumpct=0;
    do k=1 to dim(l);
    lambda=l{k};
    pctvar=l{k}/tr;
    cumpct=pctvar + cumpct;
    output;
    end;
    run;
    data lambda ;
    set lambda nobs=pvar;
    call symput('pvar',compress(pvar));
    run;
    proc print noobs round;
    title2 'Valeurs propres, variances expliquees';
    var k lambda pctvar cumpct;
    run;
     
    %* matrice des vecteurs propres;
    proc transpose data=tvectp out=vectp prefix=v;
    run;
     
    %* vecteur contenant les ecarts types;
    data sigma (keep=sig);
    set sigma;
    array covcor{*} _numeric_;
    sig=sqrt(covcor{_n_});
    run;
     
    %* Calculs concernant les individus;
    %* ================================;
    %* Calculs  des contributions et cos carres;
    data coorindq;
    if _n_ = 1 then set tlambda;
    set compr (drop= &listev) nobs=nind;
    array c{*}  prin1-prin&pvar;
    array cosca{&q};
    array cont{&q};
    array l{*} &listev;
    poids=poids/&spoids;
    disto=uss(of c{*});
    do j = 1 to &q;
           cosca{j}=c{j}*c{j}/disto;
           cont{j}=100*poids*c{j}*c{j}/l{j};
    end;
    contg=100*poids*disto/(sum(of l{*}));
    keep ident poids prin1-prin&q contg cont1-cont&q cosca1-cosca&q ;
    run;
     
    proc print noobs round;
    title2 'Coordonnees des individus contributions et cosinus carres';
    var ident poids prin1-prin&q contg cont1-cont&q cosca1-cosca&q ;
    run;
     
     
    %* calcul des coordonnees des variables;
    %* ====================================;
     
    proc print data=vectp noobs round;
    title2 'Vecteurs propres';
    run;
     
    data coordvar (drop=i lambda);
    set tvectp;
    set lambda (keep=lambda);
    array coord{*} &listev;
    do i = 1 to dim(coord);
         coord{i}=coord{i}*sqrt(lambda);
    end;
    run;
     
    proc transpose out=coordvar prefix=v;
    var _numeric_;
    run;
     
    proc print noobs round;
    title2 'Coordonnees des variables (isométrique colonnes)';
    run;
     
    %* calcul des correlations variables x facteurs;
     
    data covarfac (drop=i sig);
    set  coordvar;
    set sigma;
    array coord{*} _numeric_;
    do i = 1 to dim(coord);
         coord{i}=coord{i}/sig;
    end;
    run;
     
    proc print noobs round;
    title2 'Correlations  variables x facteurs';
    var _name_ _numeric_;
    run;
    title2;
    %mend;

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 60
    Points : 55
    Points
    55
    Par défaut
    A la place de tu mets ; ) !!!!!

  4. #4
    Responsable SAS


    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Points : 16 219
    Points
    16 219
    Par défaut
    Bonjour,
    Merci pour le conseil .... je connaissais le macro mais je n'avais pas pensé à mettre le
    Merci bien pour l'astuce

    Bonjour,
    J'ai testé le programme mais j'ai l'impression que ce ne sont les poids des individus que l'on peut modifier et pas ceux des variables.
    As-tu toi cyberboy00 ou quelqu'un d'autre une idée.
    Merci d'avance
    Fafabzh
    Les balises code
    FAQ SAS
    Rubrique SAS

    Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.

  5. #5
    Membre éprouvé
    Avatar de steelspirit
    Homme Profil pro
    SAS discute
    Inscrit en
    Janvier 2008
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SAS discute
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 472
    Points : 916
    Points
    916
    Par défaut
    As-tu toi cyberboy00 ou quelqu'un d'autre une idée
    moi je peux pas t'aider, les statistiques et moi ça fait log(10*Exp(10))

    par contre je suis le roi de la moyenne pondérée avec une pondération de 1 faut pas abuser non plus ...
    Avant de poser votre question, n'oubliez pas :
    FAQ, SAS DOC et de ce forum

  6. #6
    Responsable SAS


    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Points : 16 219
    Points
    16 219
    Par défaut
    Citation Envoyé par steelspirit Voir le message
    moi je peux pas t'aider, les statistiques et moi ça fait log(10*Exp(10))

    par contre je suis le roi de la moyenne pondérée avec une pondération de 1 faut pas abuser non plus ...
    C bien dommage .... tu veux pas t'y mettre histoire de .... c vraiment super .... et en plus tu pourrais m'aider !
    Les balises code
    FAQ SAS
    Rubrique SAS

    Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 60
    Points : 55
    Points
    55
    Par défaut
    Salut,
    quelles variables tu veux rajouter ??
    je n'ai pas bien compris ta question ?

    @+

  8. #8
    Responsable SAS


    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Points : 16 219
    Points
    16 219
    Par défaut
    Bonjour,
    En fait je veux rajouter des variables (dans listev) qui vont me servir à illustrer mes représentations factorielles sans toutefois entrer en considération dans le calcul de mes axes (poids de pour ces variables).
    J'espère être clair.
    Merci
    Les balises code
    FAQ SAS
    Rubrique SAS

    Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/05/2014, 08h18
  2. [AC-2003] Macro pour ajouter des nouvelles colonnes pour actualiser une table
    Par Carole2810 dans le forum VBA Access
    Réponses: 1
    Dernier message: 16/03/2010, 10h08
  3. Ajouter des variables au PATH
    Par Feustine dans le forum Langage
    Réponses: 5
    Dernier message: 16/08/2005, 13h59
  4. Ajouter des librairies externes pour la compilation en C++
    Par Roming22 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 11/07/2005, 10h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo