Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > SAS STAT
SAS STAT Forum d'entraide sur les fonctionnalités liées à la statistique sur SAS : statistique descriptive, test, régression, classification
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/01/2011, 17h49   #1
Candidat au titre de Membre du Club
 
Avatar de Nono Sto
 
Inscription : mars 2009
Messages : 114
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 114
Points : 10
Points : 10
Par défaut Macro SAS sur ACP

Pour affiner mon analyse de mon ACP sur les taux d'intérêt j'essaye de faire une macro.
les individus sont les dates d'observations et les variable la durée de l'emprunt affecté aux taux d'interet:

voici un exemple avec une observation et 2 variables:

1 ans 2 ans
04/01/2000 5% 7%

L'esprit est le suivant:

résultat de l'ACP
Pourcentage explicatif global des facteurs:

Facteur 1 Facteur 2 Facteur 3
valeur propre 12, 45 1,82 0,438

% expliqué 83% 12% 3%
%cumulatif 83% 95% 98%

et je souhaite avoir le pourcentage explicatif des facteurs sur chacune des variable c'est à dire les différentes maturité des taux d'interet:

Maturité Taux Facteur 1 Facteur 2 Facteur 3
1 ans x% x% x%
2 ans x% x% x%
3 ans x% x% x%
.
.
.
15 ans x% x% x%

Pour l'instant je ne suis arrivé qu'a produire l'inverse c-à-d le pourcentage explicatif des facteurs sur chacun des individus:

obsrevations Facteur 1 Facteur 2 Facteur 3
1/1/2000 x% x% x%
2/1/2000 x% x% x%
3/1/2000 x% x% x%
.
.
.
20/1/2011 x% x% x%

à l'aide de cette macro
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
TITLE 'Analyse en composantes principales';
PROC PRINCOMP DATA = ACP_GR.German_Rate_reduit OUT = ACP_GR.ACPDepout OUTSTAT = ACP_GR.ACPDepstat N=15;
VAR VAR2--VAR16;
RUN;
QUIT;
 
DATA C;                                                           
SET ACP_GR.ACPDepout;                                                                
ARRAY k{*} Prin1-Prin15; 
disto=USS(OF k{*});                                               
QLT1=Prin1*Prin1/disto;                                    
QLT2=Prin2*Prin2/disto;
QLT3=Prin3*Prin3/disto;                  
KEEP Prin-Prin3 QLT1-QLT3 ;                            
RUN;
 
PROC PRINT DATA=C;                                                   
ID ;                                          
VAR Prin1-Prin3 QLT1-QLT3 ;                                        
TITLE 'Coordonnees et qualite de representation des individus sur les axes';   
RUN;
Comment je pourrait la modifier pour atteindre le bon résultat.

Merci
Nono Sto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2011, 18h24   #2
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
ça donne quoi si tu faisais une transposition de ta table avant d'appeler la macro?
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2011, 19h18   #3
Candidat au titre de Membre du Club
 
Avatar de Nono Sto
 
Inscription : mars 2009
Messages : 114
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 114
Points : 10
Points : 10
Je ne vois pas comment faire
Nono Sto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2011, 19h41   #4
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Avec une proc transpose, les lignes deviennent des colonnes et inversement (regardes la synthaxe et des exemples sur l'aide de SAS).
Tu l'apppliques sur ta table ACP_GR.ACPDepout
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2011, 19h46   #5
Candidat au titre de Membre du Club
 
Avatar de Nono Sto
 
Inscription : mars 2009
Messages : 114
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 114
Points : 10
Points : 10
voici mon nouveaux code

Code :
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
TITLE 'Analyse en composantes principales';
PROC PRINCOMP DATA = ACP_GR.German_Rate_reduit OUT = ACP_GR.ACPDepout OUTSTAT = ACP_GR.ACPDepstat N=15;
VAR VAR2--VAR16;
RUN;
QUIT;
 
PROC TRANSPOSE DATA=ACP_GR.ACPDepout OUT= ACP_GR.trans;
RUN;
 
 
 
DATA C;                                                           
SET ACP_GR.trans;                                                                
ARRAY k{*} Prin1-Prin15; 
disto=USS(OF k{*});                                               
QLT1=Prin1*Prin1/disto;                                    
QLT2=Prin2*Prin2/disto;
QLT3=Prin3*Prin3/disto;                  
KEEP Prin1-Prin3 QLT1-QLT3 ;                            
RUN;
 
PROC PRINT DATA=C;                                                   
ID ;                                          
VAR Prin1-Prin3 QLT1-QLT3 ;                                        
TITLE 'Coordonnees et qualite de representation des individus sur les axes';   
RUN;
et voici le rapport:
Code :
1
2
3
4
5
6
7
8
 Des valeurs manquantes ont été générées à la suite d'une opération sur des valeurs manquantes.
      Chaque emplacement est défini par : (Nombre de fois) à la (Ligne):(Colonne).
      31 à la 118:7    31 à la 119:11   31 à la 120:11   31 à la 121:11
NOTE:  31 observation(s) lue(s) dans la table ACP_GR.TRANS.
NOTE: La table WORK.C a 31 observation(s) et 6 variable(s).
NOTE: L'étape DATA a utilisé (Durée totale du traitement) :
      temps réel          0.01 secondes
      temps UC            0.01 secondes
le retour print n'affiche que des point dans le tableau
Nono Sto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2011, 19h59   #6
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Stockes dans une autre table, j'ai éssayé ça marche

Code :
proc transpose DATA=test out=test2;run;
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2011, 20h07   #7
Candidat au titre de Membre du Club
 
Avatar de Nono Sto
 
Inscription : mars 2009
Messages : 114
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 114
Points : 10
Points : 10
j'ai reussi à transposé ma table

je n'arrive pas à réecrire la macro en conséquence

ci joint mes table peut etre que si tu a visualisation tu pourrais voir ou je me plante

la prmiere image est la table transposé, la deuxieme l'original
Nono Sto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2011, 20h19   #8
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Si tu peux mettre quelques lignes de ta table sur laquelle tu à appliquer la Princomp
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2011, 20h31   #9
Candidat au titre de Membre du Club
 
Avatar de Nono Sto
 
Inscription : mars 2009
Messages : 114
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 114
Points : 10
Points : 10
Voici un exemple





les observation sont les date, les VAR sont les taux
Nono Sto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2011, 20h49   #10
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
En fait, il faut transposer dabord la table avant de faire l'ACP. Adaptes ça à ton exemple. C'est une image que tu m'as envoyer, je vais pas me taper tout ça dans l'editor

Code :
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
DATA test;
input a $ b c;
cards;
A 90 67
B 67 98
C 43 12
D 44 33
;
run;
 
proc transpose DATA=test out=idlabel name=Test
     prefix=sn;
   id a ;
 
       idlabel a ;
run;
 
proc princomp DATA=idlabel out=idlabel2 OUTSTAT = ACP_GR;
run;
 
DATA idlabel2;
SET idlabel2;
keep test prin1-prin4;
run;
 
 
DATA C;                                                           
SET idlabel2;                                                                
ARRAY k{*} Prin1-Prin2; 
disto=USS(OF k{*});                                               
QLT1=Prin1*Prin1/disto;                                    
QLT2=Prin2*Prin2/disto;
QLT3=Prin3*Prin3/disto;
QLT4=Prin4*Prin4/disto;
*KEEP Prin-Prin2 QLT1-QLT2 ;                            
RUN;
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2011, 21h04   #11
Candidat au titre de Membre du Club
 
Avatar de Nono Sto
 
Inscription : mars 2009
Messages : 114
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 114
Points : 10
Points : 10
Ce n'est pas possible il y a trop de ligne ,

lorsqu'on transpose cela fait 2800 variable, il ya un moyen je pense a partir des vecteur propre d'extraire cette info mais je ne sais pas comment par les macro, celle de debut donner un bon point de depart je crois que c'est la dessus qu'il faut travailler mais j'ai aucune piste
Nono Sto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2011, 21h19   #12
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Les composantes principales sont des combinaisons linéaires de tes anciennes variables par définition.

et tu veux avoir : le pourcentage explicatif des facteurs sur chacune des variable c'est à dire les différentes maturité des taux d'interet

Je ne comprends rien
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 09h51   #13
Candidat au titre de Membre du Club
 
Avatar de Nono Sto
 
Inscription : mars 2009
Messages : 114
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 114
Points : 10
Points : 10
J'y suis presque il me faut une aide sur le code.

Je vais essayer d'etre plus clair tout en présentant ce que j'ai pu trouver.

En effet j'ai attend mon objectif cependant j'ai du tricher:

1er étape:
ACP classique

Code :
1
2
3
4
5
6
7
8
9
10
11
12
PROC CONTENTS DATA = ACP_GR.German_Rate VARNUM;
RUN;
 
PROC STANDARD DATA = ACP_GR.German_Rate VARDEF = df MEAN = 0 STD = 1 OUT = ACP_GR.German_Rate_reduit;
VAR VAR2--VAR16;
RUN;
 
TITLE 'Analyse en composantes principales';
PROC PRINCOMP DATA = ACP_GR.German_Rate_reduit OUT = ACP_GR.ACPDepout OUTSTAT = ACP_GR.ACPDepstat N=15;
VAR VAR2--VAR16;
RUN;
QUIT;
puis extraction des valeurs propre et de la matrice des vecteurs propre

Code :
1
2
3
4
5
6
7
8
DATA VAL_P VEC_P;
SET ACP_GR.ACPDepstat;
	SELECT(_type_);
	when('EIGENVAL') output VAL_P;
	when('SCORE') output VEC_P;
	otherwise;
	end;
run;
inversion de la matrice des vecteurs propres

Code :
1
2
PROC TRANSPOSE DATA=Work.VEC_P OUT= ACP_GR.VEC_P;
RUN;
Puis je calcule le pourcentage explicatif des facteurs sur chacun des taux
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
DATA EXP;                                                           
SET ACP_GR.VEC_P;                                                                
ARRAY k{*} Prin1-Prin15; 
disto=USS(OF k{*});                                               
QLT1=Prin1*Prin1*12.4550;                                    
QLT2=Prin2*Prin2*1.8120;
QLT3=Prin3*Prin3*0.4380;                  
KEEP Prin1-Prin3 QLT1-QLT3 ;                            
RUN;
 
PROC PRINT DATA=EXP;                                                   
ID ;                                          
VAR Prin1-Prin3 QLT1-QLT3 ;                                        
TITLE 'Pourcentage explicatif des facteurs sur les variations de taux 2000-2010';   
RUN;
Actuellement mon problème est que je rentre manuellement dans le code les valeurs propres (ici 12.4550, 1.8120 et 0.4380), je souhaite donc integre à ma table EXP le vecteur des valeurs propres pour faire la multiplications.

Ce pendant pour cela je dois aussi transposé le vecteur des valeurs propre avant d'integrer cela ne marche pas (voir l'image)

Enfin je sais que je peux eviter les transpositions pour faire mes calcul, mais je ne sais pas comment remplacer Prin(i) dans mes commande par le nom de la variable ( ici on a par exemple pour la premiere Listed Federal securities / residual maturity of 1.0 years / daily data)
Images attachées
Type de fichier : jpg Sans titre.JPG (64,2 Ko, 1 affichages)
Type de fichier : jpg Sans titre_2.JPG (61,2 Ko, 2 affichages)
Nono Sto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 10h05   #14
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Si tu arrives à poster quelques lignes de ta table dans une instruction cards, je pourrais t'aider
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 10h47   #15
Rédacteur
 
Homme Stéphane
Consultant et formateur SAS et Cognos
Inscription : avril 2009
Messages : 1 791
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Consultant et formateur SAS et Cognos
Secteur : Conseil

Informations forums :
Inscription : avril 2009
Messages : 1 791
Points : 4 012
Points : 4 012
Nono Sto, tu peux faire un double SET pour fusionner tes tables :

Code :
1
2
3
4
DATA res;
IF _n_=1 then SET VAL_P (keep= variable...) ;
SET VEC_P;
run;
__________________
N'oubliez pas de cliquer sur lorsque votre problème est réglé !

Moteur de recherche dans les papiers SAS
datametric est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 10h47   #16
Candidat au titre de Membre du Club
 
Avatar de Nono Sto
 
Inscription : mars 2009
Messages : 114
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 114
Points : 10
Points : 10
Merci

je vais essayer

Code :
1
2
3
4
5
6
7
8
9
10
DATA test;
input a $ b c;
cards;
DATE             1.0 year rate  2.0 years rate     3.0 years rate
1/1/2000           5%                  5%                 5%
2/1/2000           5%                  5%                 5%
3/1/2000           5%                  5%                 5%
4/1/2000           5%                  5%                 5%
;
run;
Nono Sto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 10h54   #17
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Tu transposes tes deux tables, tu fusionnes et voilà.
J'espere bien que ça répond à tes attentes

Code :
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
PROC TRANSPOSE DATA=VEC_P OUT= VEC_P;
RUN;
 
DATA VAL_P ;
SET VAL_P ;
DROP _nAME_ _TYPE_;
run;
 
 
PROC TRANSPOSE DATA=VAL_P OUT= VAL_P;
RUN;
 
proc sort DATA=VAL_P;
BY _NAME_;
run;
 
proc sort DATA=VEC_P;
BY _NAME_;
run;
 
DATA VEC_VAL;
merge VAL_P VEC_P;
BY _NAME_;
run;
 
DATA EXP;                                                           
SET VEC_VAL;                                                                
ARRAY k{*} Prin1-Prin2; 
disto=USS(OF k{*});                                               
QLT1=Prin1*Prin1*COL1;                                    
QLT2=Prin2*Prin2*COL1;
KEEP Prin1-Prin2 QLT1-QLT2 ;                            
RUN;
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 11h39   #18
Candidat au titre de Membre du Club
 
Avatar de Nono Sto
 
Inscription : mars 2009
Messages : 114
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 114
Points : 10
Points : 10
Merci beaucoup
je crois que l'on brule cependant j'ai un message d'erreur et sa plante:

Code :
1
2
3
4
 proc sort DATA=Work.VAL_P;
34   BY _NAME_;
ERROR: Variable _NAME_ introuvable.
35   run;
et

Code :
1
2
3
4
5
6
 DATA VEC_VAL;
42   merge Work.VAL_P Work.VEC_P;
43   BY _NAME_;
44   run;
 
ERROR: Variable BY _NAME_ inexistante dans la TABLE d'entrée WORK.VAL_P.
Nono Sto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 11h42   #19
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Tu peux vérifier dans les deux tables en affichant le nom des variables. ça m'étonne que ça marche pas
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 12h15   #20
Candidat au titre de Membre du Club
 
Avatar de Nono Sto
 
Inscription : mars 2009
Messages : 114
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 114
Points : 10
Points : 10
J'ai fait des erreur de frappe il reconnait bien _NAME_

Cependant il se passe quelque chose de bizarre, lors de la fusion toute les donné ce melange

ce qui fausse complétement les calcule
Nono Sto est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h25.


 
 
 
 
Partenaires

Hébergement Web