Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > Macro
Macro Forum d'entraide sur le langage Macro de SAS
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 04/03/2011, 13h28   #1
Membre habitué
 
Homme Julien
Ingénieur d'études / Biostatisticien
Inscription : décembre 2009
Messages : 304
Détails du profil
Informations personnelles :
Nom : Homme Julien
Localisation : France

Informations professionnelles :
Activité : Ingénieur d'études / Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : décembre 2009
Messages : 304
Points : 101
Points : 101
Par défaut Macro pour combinatoire

Bonjour, je voulais vous demander si vous connaissez une macro qui à partir d'une liste de variables, créé l'ensemble de toutes les combinaisons possibles et peut-être utilisée directement dans des procédures comme l'analyse discriminante par exemple?

L'idée est juste de pouvoir appliquer l'analyse discriminante (ou autre) sur toutes les combinaisons de variables disponibles dans ma table.

Merci d'avance.
joyeux_lapin13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 13h45   #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
Encore toi Julien?
Tu peux donner un exemple de combinaisons à partir de 3 variables par exemple?
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 14h20   #3
Membre habitué
 
Homme Julien
Ingénieur d'études / Biostatisticien
Inscription : décembre 2009
Messages : 304
Détails du profil
Informations personnelles :
Nom : Homme Julien
Localisation : France

Informations professionnelles :
Activité : Ingénieur d'études / Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : décembre 2009
Messages : 304
Points : 101
Points : 101
Lol! oui j'vous harcèle je sais lol!

ex: col1 = V1 col2 = V2 col3 = V3
Liste = V1 V2 V3
Combi = {V1} {V2} {V3} {V1 V2} {V1 V3} {V2 V3} {V1 V2 V3}
joyeux_lapin13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 14h40   #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
Il faudrait programme qui prend en paramètre une macro variable, et lors de l'éxecution du lui donnes soit une variable où une liste de variable.s

Code :
1
2
3
4
5
6
7
8
9
10
11
12
%MACRO ANALYSE(var=);
 
PROC CORRESP DATA=LAPIN;
TABLES &var.;
RUN;
 
%MEND;
 
%ANALYS(var=V1);
%ANALYSE(var=V1 V2);
......
....
Par contre je ne sais pas comment définir automatiquement toutes les combinaisons possible.

Bon courage!
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 14h46   #5
Membre habitué
 
Homme Julien
Ingénieur d'études / Biostatisticien
Inscription : décembre 2009
Messages : 304
Détails du profil
Informations personnelles :
Nom : Homme Julien
Localisation : France

Informations professionnelles :
Activité : Ingénieur d'études / Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : décembre 2009
Messages : 304
Points : 101
Points : 101
Merci pour ton conseil Megamind2!
joyeux_lapin13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 14h49   #6
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 823
Points : 2 823
Pour faire ça, j'utilise la proc PLAN (dans SAS/STAT). Il suffit de faire un petit format qui associe chaque variable à un nombre entier, car PLAN ne randomisera que des nombres de 1 à n.

En SAS 9.2 on peut aussi utiliser la fonction ALLCOMB. Ci-dessous un extrait d'une petite macro maison.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
	PROC CONTENTS DATA=&TABLE (KEEP=&quanti &quali)
				   OUT=work.dico NOPRINT ;
	RUN ;
	PROC TRANSPOSE DATA=work.dico (KEEP=name) 
					OUT=work.dico ;
		VAR name ;
	RUN ;
	DATA work.test ;
		SET work.dico ;
		ARRAY vars $ col: ;
		n = DIM(vars) ;
		DO k=1 TO n ;
			nbComb = COMB(n,k);
			DO i=1 TO nbComb ;
	      		rc=ALLCOMB(i, k, OF vars[*]);
				OUTPUT ;
			END ;
		END ;
	RUN ;
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/03/2011, 16h18   #7
Membre habitué
 
Homme Julien
Ingénieur d'études / Biostatisticien
Inscription : décembre 2009
Messages : 304
Détails du profil
Informations personnelles :
Nom : Homme Julien
Localisation : France

Informations professionnelles :
Activité : Ingénieur d'études / Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : décembre 2009
Messages : 304
Points : 101
Points : 101
Merci Olivier! je vais regarder tout ça de suite!
joyeux_lapin13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2011, 16h30   #8
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 823
Points : 2 823
Voilà une petite proc PLAN pour la route (--> ça fait une proc GPS. Oui, bon OK c'est nul comme blague).
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
%MACRO combinaisons (TABLE, exclues=) ;
PROC CONTENTS DATA=&TABLE 
					%IF %LENGTH(&exclues)>0 %THEN (DROP=&exclues) ;
               OUT=work.dico (KEEP=name varnum) NOPRINT ;
RUN ;
DATA work.format ;
  SET work.dico (RENAME=(name=label varnum=start))
     NOBS=nVar 
     END=fin ;
  type="N" ;
  fmtname="var" ;
  OUTPUT ;
  IF fin THEN DO ;
	CALL SYMPUTX("nbVar",nVar) ;
	start=. ;
	label="" ;
	OUTPUT ;
  END ;
RUN ;
PROC FORMAT CNTLIN=work.format ;
RUN ;
ODS OUTPUT plan=work.combinaisons (DROP=modeles) ;
PROC PLAN ;
      %DO i=1 %TO &nbVar ;
      FACTORS modeles=%SYSFUNC(COMB(&nbVar, 1)) ORDERED
              var = &i OF &nbVar COMB ;
	  %END ;
RUN ; QUIT ;
PROC PRINT DATA=work.combinaisons LABEL NOOBS ;
  FORMAT var: var. ;
RUN ;
%MEND combinaisons ;
%combinaisons (sashelp.prdsale) ;
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/03/2011, 09h26   #9
Membre habitué
 
Homme Julien
Ingénieur d'études / Biostatisticien
Inscription : décembre 2009
Messages : 304
Détails du profil
Informations personnelles :
Nom : Homme Julien
Localisation : France

Informations professionnelles :
Activité : Ingénieur d'études / Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : décembre 2009
Messages : 304
Points : 101
Points : 101
Bonjour Olivier, je viens tout juste de tester ton code et c'est exactement ce que je cherche! Merci à toi et Megamind2!
joyeux_lapin13 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 15h51.


 
 
 
 
Partenaires

Hébergement Web