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 16/02/2011, 18h28   #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 Création de DOTPLOTS particuliers

Bonjour, je voulais savoir si quelqu'un connait une MACRO pour faire des DOTPLOTS ayant cette forme là:

http://4.bp.blogspot.com/_Y7yEfDrPG4...600/netdoc.jpg

??
joyeux_lapin13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 10h54   #2
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
dans l'autre sens (vertical) il y a la proc boxplot, qui se base sur les quartiles. Tu peux le faire "à la main" via un annotate.
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 11h06   #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
Euh... j'avoue ne pas bien voir l'idée, pour moi ANNOTATE permet juste de mettre des noms et des couleurs éditées sur des points qu'on plot en fait... aprés j'ai une vision restreinte vue que je me suis servis des ANNOTATE que pour les projections des ACM et à mon boulot cette instruction plante (j'avais fait un topic sur ce forum à ce sujet).

Sinon pour le moment la seule idée que j'ai eu, mais je n'ai pas eu le temps de m'y mettre, c'est rajouté une colonne contenant les arrondis des datas.
Calculer les rangs puis ensuite éditer la colonne des rangs en fonction des égalités.
Enfin ploter les datas d'origine et celles dont les rangs étaient égaux, les décaller sur les côtés.

Bon après dit comme ça c'est facile mais déjà je vois pas comment arriver à faire le décallage pour les rangs égaux...
joyeux_lapin13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 12h15   #4
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
non, tu peux tracer des droites, des cercles, des polygones....

Ses possibilités sont assez larges

Je ne vois pas ce que veux faire avec les rangs
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 12h31   #5
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
si tu es en 9.2, je serai tenté de te renvoyer à cela :

http://support.sas.com/documentation...lhbox-stmt.htm
__________________
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 17/02/2011, 12h46   #6
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
Oui je suis bien en 9.2, par contre on dirait des boxplots classiques sur le lien que tu m'as donné lol... mais je vais regarder ça quand même au niveau des options.

Sinon Manoutz, l'idée des rangs est juste de repérer les valeurs qui sont proches à arrondis prés (qu'il me faudra ajuster judicieusement). Ainsi les valeurs trop proche entre elles ne seront pas confondues mais superposées.

Le but que je recherche dans ces dotplots est une représentation graphique qui permet de voir correctement la distribution d'une variable en fonction des différentes classes, de tel manière à ce qu'un tas de points ne soit pas écrasé mais superposé pour que l'on puisse voir l'effet de masse au sein de tel ou tel partie du boxplot (observations du quartile 1, 2 ou du quantile).

Aprés superposer un boxplot par dessus n'est pas une obligation, là j'ai mis ce lien pour éclaircir ce que je vise.
joyeux_lapin13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 13h05   #7
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
Et tu as pensé au lissage? ca peut permettre une bonne approximation de la distribution de chaque catégorie
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/02/2011, 14h43   #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
+1 sur le lissage. La proc KDE fait ça très bien.
Sinon, comme le suggérait Stéphane, la v9.2 offre des fonctionnalités graphiques prometteuses. Mais rien de simple, à ce que j'ai vu jusqu'à présent, pour ton cas.
J'ai bricolé un petit code, mais il y a vraiment beaucoup de points (1440 en 3 séries), donc certains se superposent quand même. La clé, c'est l'option SPREAD qui essaye d'éviter le chevauchement des outliers en les décalant. L'astuce est donc de faire croire à SAS que tous les points sont des outliers !
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
37
38
39
40
41
42
43
PROC TEMPLATE ;
  DEFINE STATGRAPH joyeuxLapin13 / STORE=work.graphiques ;
    DYNAMIC quanti quali ;
    BEGINGRAPH ;
		LAYOUT OVERLAY ;
			BOXPLOT X=quali Y=quanti / EXTREME=TRUE ORIENT=HORIZONTAL DISPLAY=(MEDIAN) ;
 			BOXPLOTPARM X=quali Y=quanti STAT=stat / SPREAD=TRUE ORIENT=HORIZONTAL DISPLAY=(OUTLIERS) 
												MEDIANATTRS=(THICKNESS=0);
		ENDLAYOUT ;
	ENDGRAPH ;
  END ;
RUN ;
ODS PATH (PREPEND) work.graphiques ;
ODS EXCLUDE ALL ;
ODS OUTPUT summary = work.stats (RENAME=(actual_median=actual)) ;
PROC MEANS DATA=sashelp.prdsale MEDIAN NONOBS ;
  VAR actual;
  CLASS country ;
RUN ;
ODS SELECT ALL ;
DATA work.prdsale ;
  SET sashelp.prdsale (KEEP=actual country)
	  work.stats (IN=stats) ;
  LENGTH stat $ 15 ;
  IF stats THEN DO ;
	  stat="MEDIAN" ;
	  OUTPUT ;
	  stat="Q1" ;
	  OUTPUT ;
	  stat="Q3" ;
	  OUTPUT ;
  END ;
  ELSE DO ;
	  stat = "OUTLIER" ;
	  OUTPUT ;
	END ;
RUN ;
PROC SORT DATA=work.prdsale ;
  BY country ;
RUN ;
PROC SGRENDER DATA=work.prdsale TEMPLATE=joyeuxLapin13 ;
  DYNAMIC quanti="actual" quali="country" ;
RUN ;
Bon courage.
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/02/2011, 15h01   #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
Merci à tous les 3!

Je vais regarder tout ça et vous tiens au courant.
joyeux_lapin13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 15h07   #10
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
je ne voyais pas si loin...

en mon sens, au regard de l'objectif de représentation graphique, un simple proc univariate avec un kernel suffit...
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 16h42   #11
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
Voilà je viens de tester le prog d'O. Decourt et ça fait exactement ce que je souhaite! bon j'avais pas mal de points que le prog laissait confondu ou presque, du coup j'ai arrondi les valeurs puis j'ai appliqué sur la colonne des arrondis.
J'ai tout mis sous forme de macro, me reste plus qu'à trouver un moyen d'automatiser l'arrondi pour que ça soit le plus lisible possible à chaque fois que je l'utiliserais pour faire ces dotplots sur plusieurs variables à la fois.

Tant que j'y suis lol, serait-il possible de me fournir un lien trés bien fait (parce que là je reviens de google pour la doc TEMPLATE et j'ai l'impression d'être à des années lumières lol), pour découvrir les bases de cette proc? et puisque j'abuse autant abuser un peu plus mdr, si sur ce programme je veux rajouter une couleur, par exemple colorier les points en fonction de la classe ou même en fonction de leur appartenance aux quartiles et au quantile?

Pour Manoutz, j'ai mis en attaché ce dont tu me parlais je crois? en effet c'est intéressant, mais comme je bosse dans le biomédicale je dois faire face à des jeux de données pas souvent étoffés (donc histogrammes peu informatifs) et avec des dosages coupés à 0, d'où l'intérêt de pouvoir sortir ce type de dotplots afin de montrer de façon plus précise les concentrations.

Vraiment merci à vous 3, j'ai surement pas fini avec mes topics sur votre forum lol mais sincèrement merci, ce truc est trop beau!
Images attachées
Type de fichier : jpg Graphe.JPG (35,5 Ko, 11 affichages)
joyeux_lapin13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 17h13   #12
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
Effectivemment la taille de l'échantillon est une contrainte à considérer. Peut être est ce possible de contrôler le nombre de barres dans ton histogramme afin de bien s'adapter à la problématique.
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 17h26   #13
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
Il peut m'arriver de devoir confronter une population de 10 individus contre 10 autres en fait...
joyeux_lapin13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 17h02   #14
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
Salut, je me permet de décocher mon topic sur les dotplots car j'aimerais améliorer légérement la macro que j'ai grace à Olivier. L'idée, que j'avais déjà demandé à la va-vite, est d'enjoliver le résultat final en coloriant les points ou les boxplots par classe.

En m'aidant d'un autre topic où Olivier m'avait donné une idée pour colorier les boxplots en fonction des classes (cf http://www.developpez.net/forums/d10...nction-classe/ ), j'ai écris la chose suivante qui ne marche pas pour je ne sais quel raison... :

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
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
 
%MACRO DOTPLOT(TABLE = , VAR_REPONSE = , VAR_EXPLICATIVE = , CLASSE_RISQ =, ID = );
 
/* automatisation de l'arrondi en fonction de la valeur la plus haute de la gamme */
	DATA plottage;
	SET &TABLE.;
	IF &VAR_EXPLICATIVE. ^=.;
	ARRONDI = 10**(scan(put(&VAR_EXPLICATIVE.,e.),2,'+')-2);
	KEEP &VAR_REPONSE. &VAR_EXPLICATIVE. ARRONDI;
	RUN;
 
	PROC SQL;
	CREATE TABLE plottage AS SELECT * , max(ARRONDI) AS mx, ROUND(&VAR_EXPLICATIVE., CALCULATED mx) AS dotplot
	FROM plottage ;
	quit;
 
/* Création du template */
	PROC TEMPLATE;
	DEFINE STATGRAPH dotplot / STORE = work.graphe;
	DYNAMIC couleur1 couleur2;
	BEGINGRAPH;
	LAYOUT OVERLAY;
/* Insertion de l'astuce d'Olivier pour mon autre macro Boxplot */
	BOXPLOT X = &VAR_REPONSE. Y = Dotplot / EXTREME = TRUE DISPLAY = (MEDIAN) OUTLIERATTRS = &ID. FILLATTRS = (COLOR = couleur1);
	BOXPLOTPARM X = &VAR_REPONSE. Y = Dotplot STAT = stat / SPREAD = TRUE DISPLAY = (OUTLIERS) MEDIANATTRS = (THICKNESS = 0);
	BOXPLOT X = &VAR_REPONSE. Y= BISDotplot / EXTREME = TRUE DISPLAY = (MEDIAN) OUTLIERATTRS = &ID. FILLATTRS = (COLOR = couleur2);
	BOXPLOTPARM X = &VAR_REPONSE. Y = BISDotplot STAT = stat / SPREAD = TRUE DISPLAY = (OUTLIERS) MEDIANATTRS = (THICKNESS = 0);
	ENDLAYOUT;
	ENDGRAPH;
	END;
	RUN; 
 
	ODS PATH (PREPEND) work.graphe;
 
	ODS EXCLUDE ALL;
	ODS OUTPUT summary = work.stats (RENAME = (dotplot_median = dotplot)); 
	PROC MEANS DATA = plottage MEDIAN NONOBS;
	VAR dotplot;
	CLASS &VAR_REPONSE.;
	RUN;
	ODS SELECT ALL;
	ODS OUTPUT CLOSE;
 
	DATA plottage;
	SET plottage (KEEP = dotplot &VAR_REPONSE.) work.stats (IN = stats);
	LENGTH stat $ 15;
	IF stats THEN DO;
	stat = "MEDIAN";
	OUTPUT;
	stat = "Q1";
	OUTPUT;
	stat = "Q3";
	OUTPUT;
	END;
	ELSE DO;
	stat = "OUTLIER";
	OUTPUT;
	END;
	RUN;
 
/* Insertion de la seconde astuce d'Olivier qui consistait à isoler la gamme en sous-gamme par classe */
	PROC SQL;
	CREATE TABLE plottage AS
	SELECT *,
	CASE WHEN (&VAR_REPONSE. NE &CLASSE_RISQ.) THEN dotplot ELSE . END AS BISdotplot
	FROM plottage 
	GROUP BY &VAR_REPONSE.;
	QUIT;
 
	PROC SORT DATA = plottage;
	BY &VAR_REPONSE. dotplot;
	RUN;
 
	PROC SGRENDER DATA = plottage TEMPLATE = dotplot;
	DYNAMIC couleur1 = "yellow" couleur2 = "red";
	RUN ;
 
%MEND DOTPLOT;
Voilà, seulement ça fait toujours bien le dotplot mais les couleurs ne se rajoutent pas... j'avoue également ne pas du tout maitriser la proc TEMPLATE mais n'ayant pas le temps de m'y plonger j'espérais un p'tit coup d'main...

En vous remerciant d'avance...
joyeux_lapin13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 12h20   #15
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
Oyet, j'me permet un petit up de mon topic surtout que j'ai pu trouver le temps de regarder plus en profondeur la proc TEMPLATE gâace à ce p'tit document de m'sieur Decourt http://www.od-datamining.com/reporting/GTL_9_1_3.pdf

Donc j'ai compris pourquoi ça ne marchait pas, aussi j'aurais voulu vous demandez quel est l'option qui permet de choisir la couleur des points? en effet en page 7 de ce document il semble y avoir la réponse à mon problème grace à l'option GROUP.

En vous remerciant d'avance.
joyeux_lapin13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 16h49   #16
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
Bonjour m'sieur Julien.
Les couleurs et types de marqueurs utilisés via les groupes sont indiqués par le style ODS utilisé (malin, non ?). Ce sont les éléments de style qui s'appellent GraphData1, GraphData2, etc.
Vois donc avec une autre proc Template pour définir ton style !!!
Et surtout bon courage.
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 17h33   #17
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
Je n'avais pas compris que l'on pouvait appliquer plusieurs template même si ça reste logique, merci pour les indications Olivier!
joyeux_lapin13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2011, 14h38   #18
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
Salut, je reviens cloturer ce topic une bonne fois pour toute puisque j'ai enfin réussi à coder ce que je voulais! alors j'ai cherché à mettre en oeuvre ton idée de deux templates Olivier mais je dois pas être assez doué pour comprendre comment en fait, ceci dit j'ai pu découvrir comment éditer facilement les sorties grâce aux Graphdatas donc j'aurais pas perdu mon temps pour rien finalement!

Voici le code que j'ai mis, je l'ai fini à l'instant donc il peut avoir quelques bugs et est très loin d'être aussi sexy que le code de bases d'Olivier mais au moins je ne travaille plus sur des arrondis de données pour pouvoir les superposer. Et puis ça servira surement à quelqu'un tant la représentation dotplot est assez confortable pour les gens qui sont pas très familier avec les stats.

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
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
 
%MACRO dotplot_new(TABLE = , VAR_CLASS = , VAR_EXPLICATIVE = , VAR_REF = );
 
DATA RECUP_CLASS;
SET &TABLE.;
KEEP &VAR_CLASS.;
RUN;
 
PROC SORT DATA = RECUP_CLASS NODUPKEY;
BY &VAR_CLASS.;
RUN;
 
PROC SQL NOPRINT;
SELECT DISTINCT(&VAR_CLASS.)
INTO   :LIST_CLASS
separated BY ' '
FROM RECUP_CLASS;
SELECT COUNT(&VAR_CLASS.)
INTO   :NB_CLASS
FROM RECUP_CLASS;
QUIT; 
 
PROC SQL NOPRINT;
SELECT DISTINCT(&VAR_CLASS.)
INTO   :LIST_CLASSb
separated BY '                                                     '
FROM RECUP_CLASS;
QUIT; 
 
DATA DOTPLOT;
SET &TABLE.;
IF &VAR_CLASS. = "%SCAN(&LIST_CLASS., 1)" THEN Y_superpose = 1;
RUN;
 
%DO iteration_CLASS = 2 %TO &NB_CLASS.;
 
	DATA DOTPLOT;
	SET DOTPLOT;
	IF &VAR_CLASS. = "%SCAN(&LIST_CLASS., &iteration_CLASS.)" THEN Y_superpose = &iteration_CLASS.;
	RUN;
 
	DATA BALISE&iteration_CLASS.;
	SET DOTPLOT;
	RUN;
 
%END;
 
DATA DOTPLOT;
SET DOTPLOT;
KEEP Y_superpose &VAR_EXPLICATIVE. &VAR_REF.;
Y_superpose = Y_superpose + ranuni(1)/4;
RUN;
 
PROC SORT DATA = &TABLE.;
BY &VAR_CLASS.;
RUN;
 
ODS GRAPHICS ON;
PROC BOXPLOT DATA = &TABLE.;
PLOT &VAR_EXPLICATIVE. * &VAR_CLASS. / OUTBOX = DONNEES;
INSETGROUP min Q2 max mean std;
ODS EXCLUDE BOXPLOT;
RUN;
ODS GRAPHICS OFF;
 
DATA boxplot;
RUN;
 
%DO iteration_CLASS = 1 %TO &NB_CLASS.;
 
	DATA boxplot_net;
	SET DONNEES;
	IF &VAR_CLASS. = "%SCAN(&LIST_CLASS., &iteration_CLASS.)";
	IF _TYPE_ ^= 'N';
	IF _TYPE_ ^= 'STDDEV';
	DROP &VAR_CLASS. _VAR_;
	RUN;
 
	DATA add1;
	_TYPE_ = 'DEP';
	_VALUE_ = &iteration_CLASS. - 0.05;
	RUN;
 
	DATA add2;
	_TYPE_ = 'FIN';
	_VALUE_ = &iteration_CLASS. + 0.3;
	RUN;
 
	DATA add3;
	_TYPE_ = 'MID';
	_VALUE_ = &iteration_CLASS. + 0.125;
	RUN;
 
	DATA ADD;
	SET add1 add2;
	RUN;
 
	DATA ADD;
	SET ADD add3;
	RUN;
 
	DATA boxplot_net;
	SET boxplot_net ADD;
	RUN;
 
	PROC TRANSPOSE DATA = boxplot_net OUT = boxplot&iteration_CLASS.;
	ID _TYPE_;
	RUN;
 
	DATA boxplot;
	SET boxplot boxplot&iteration_CLASS.;
	RUN;
 
%END;
 
DATA boxplot;
SET boxplot;
IF Q1 ^= .;
RUN;
 
DATA DOTPLOT;
SET DOTPLOT boxplot;
MERGE DOTPLOT boxplot;
DROP _LABEL_ _NAME_;
RUN;
 
PROC SGPLOT DATA = DOTPLOT;
SCATTER X = Y_superpose Y = &VAR_EXPLICATIVE. / GROUP = &VAR_REF. MARKERATTRS = (SYMBOL = CIRCLEFILLED SIZE = 5) NAME = "observations";
VECTOR X = FIN Y = Q1 / XORIGIN = DEP YORIGIN = Q1 NOARROWHEADS LINEATTRS = (COLOR = "black");
VECTOR X = FIN Y = Q3 / XORIGIN = DEP YORIGIN = Q3 NOARROWHEADS LINEATTRS = (COLOR = "black");
VECTOR X = FIN Y = MEAN / XORIGIN = DEP YORIGIN = MEAN NOARROWHEADS LINEATTRS = (PATTERN = THINDOT COLOR = "black") NAME = "point_mean";
VECTOR X = FIN Y = MEDIAN / XORIGIN = DEP YORIGIN = MEDIAN NOARROWHEADS LINEATTRS = (PATTERN = DOT COLOR = "black") NAME = "point_median";
VECTOR X = DEP Y = Q3 / XORIGIN = DEP YORIGIN = Q1 NOARROWHEADS LINEATTRS = (COLOR = "black");
VECTOR X = FIN Y = Q3 / XORIGIN = FIN YORIGIN = Q1 NOARROWHEADS LINEATTRS = (COLOR = "black");
VECTOR X = MID Y = MAX / XORIGIN = MID YORIGIN = Q3 NOARROWHEADS LINEATTRS = (COLOR = "black");
VECTOR X = MID Y = MIN / XORIGIN = MID YORIGIN = Q1 NOARROWHEADS LINEATTRS = (COLOR = "black");
XAXIS LABEL = "&LIST_CLASSb." DISPLAY = (NOVALUES);
KEYLEGEND "observations" "point_mean" "point_median";
RUN;
 
%MEND;

Merci à tous ceux qui se sont intéressés à mon problème et m'ont permis de me familiariser avec les templates .
joyeux_lapin13 est déconnecté   Envoyer un message privé Réponse avec citation 20
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h00.


 
 
 
 
Partenaires

Hébergement Web