Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- libname malib 'c:\documents and settings\malot\sas';
- data iris;
- input SepalLength SepalWidth PetalLength PetalWidth Species @@;
- label SepalLength='Sepal Length in mm.'
- SepalWidth ='Sepal Width in mm.'
- PetalLength='Petal Length in mm.'
- PetalWidth ='Petal Width in mm.';
- symbol = put(species, specname10.);
- datalines;
- 50 33 14 02 1 64 28 56 22 3 65 28 46 15 2 67 31 56 24 3
- 63 28 51 15 3 46 34 14 03 1 69 31 51 23 3 62 22 45 15 2
- 59 32 48 18 2 46 36 10 02 1 61 30 46 14 2 60 27 51 16 2
- 65 30 52 20 3 56 25 39 11 2 65 30 55 18 3 58 27 51 19 3
- 68 32 59 23 3 51 33 17 05 1 57 28 45 13 2 62 34 54 23 3
- 77 38 67 22 3 63 33 47 16 2 67 33 57 25 3 76 30 66 21 3
- 49 25 45 17 3 55 35 13 02 1 67 30 52 23 3 70 32 47 14 2
- 64 32 45 15 2 61 28 40 13 2 48 31 16 02 1 59 30 51 18 3
- 55 24 38 11 2 63 25 50 19 3 64 32 53 23 3 52 34 14 02 1
- 49 36 14 01 1 54 30 45 15 2 79 38 64 20 3 44 32 13 02 1
- 67 33 57 21 3 50 35 16 06 1 58 26 40 12 2 44 30 13 02 1
- 77 28 67 20 3 63 27 49 18 3 47 32 16 02 1 55 26 44 12 2
- 50 23 33 10 2 72 32 60 18 3 48 30 14 03 1 51 38 16 02 1
- 61 30 49 18 3 48 34 19 02 1 50 30 16 02 1 50 32 12 02 1
- 61 26 56 14 3 64 28 56 21 3 43 30 11 01 1 58 40 12 02 1
- 51 38 19 04 1 67 31 44 14 2 62 28 48 18 3 49 30 14 02 1
- 51 35 14 02 1 56 30 45 15 2 58 27 41 10 2 50 34 16 04 1
- 46 32 14 02 1 60 29 45 15 2 57 26 35 10 2 57 44 15 04 1
- 50 36 14 02 1 77 30 61 23 3 63 34 56 24 3 58 27 51 19 3
- 57 29 42 13 2 72 30 58 16 3 54 34 15 04 1 52 41 15 01 1
- 71 30 59 21 3 64 31 55 18 3 60 30 48 18 3 63 29 56 18 3
- 49 24 33 10 2 56 27 42 13 2 57 30 42 12 2 55 42 14 02 1
- 49 31 15 02 1 77 26 69 23 3 60 22 50 15 3 54 39 17 04 1
- 66 29 46 13 2 52 27 39 14 2 60 34 45 16 2 50 34 15 02 1
- 44 29 14 02 1 50 20 35 10 2 55 24 37 10 2 58 27 39 12 2
- 47 32 13 02 1 46 31 15 02 1 69 32 57 23 3 62 29 43 13 2
- 74 28 61 19 3 59 30 42 15 2 51 34 15 02 1 50 35 13 03 1
- 56 28 49 20 3 60 22 40 10 2 73 29 63 18 3 67 25 58 18 3
- 49 31 15 01 1 67 31 47 15 2 63 23 44 13 2 54 37 15 02 1
- 56 30 41 13 2 63 25 49 15 2 61 28 47 12 2 64 29 43 13 2
- 51 25 30 11 2 57 28 41 13 2 65 30 58 22 3 69 31 54 21 3
- 54 39 13 04 1 51 35 14 03 1 72 36 61 25 3 65 32 51 20 3
- 61 29 47 14 2 56 29 36 13 2 69 31 49 15 2 64 27 53 19 3
- 68 30 55 21 3 55 25 40 13 2 48 34 16 02 1 48 30 14 01 1
- 45 23 13 03 1 57 25 50 20 3 57 38 17 03 1 51 38 15 03 1
- 55 23 40 13 2 66 30 44 14 2 68 28 48 14 2 54 34 17 02 1
- 51 37 15 04 1 52 35 15 02 1 58 28 51 24 3 67 30 50 17 2
- 63 33 60 25 3 53 37 15 02 1
- ;
- run;
- *\on voit dans la table donnee qu'il y a une option de format qui est incluse dans le put\*;
- *\donc ainsi cela ne peut pas tourner\*;
- *\table corrigee\*;
- data iris;
- input SepalLength SepalWidth PetalLength PetalWidth Species @@;
- label SepalLength='Sepal Length in mm.'
- SepalWidth ='Sepal Width in mm.'
- PetalLength='Petal Length in mm.'
- PetalWidth ='Petal Width in mm.';
- datalines;
- 50 33 14 02 1 64 28 56 22 3 65 28 46 15 2 67 31 56 24 3
- 63 28 51 15 3 46 34 14 03 1 69 31 51 23 3 62 22 45 15 2
- 59 32 48 18 2 46 36 10 02 1 61 30 46 14 2 60 27 51 16 2
- 65 30 52 20 3 56 25 39 11 2 65 30 55 18 3 58 27 51 19 3
- 68 32 59 23 3 51 33 17 05 1 57 28 45 13 2 62 34 54 23 3
- 77 38 67 22 3 63 33 47 16 2 67 33 57 25 3 76 30 66 21 3
- 49 25 45 17 3 55 35 13 02 1 67 30 52 23 3 70 32 47 14 2
- 64 32 45 15 2 61 28 40 13 2 48 31 16 02 1 59 30 51 18 3
- 55 24 38 11 2 63 25 50 19 3 64 32 53 23 3 52 34 14 02 1
- 49 36 14 01 1 54 30 45 15 2 79 38 64 20 3 44 32 13 02 1
- 67 33 57 21 3 50 35 16 06 1 58 26 40 12 2 44 30 13 02 1
- 77 28 67 20 3 63 27 49 18 3 47 32 16 02 1 55 26 44 12 2
- 50 23 33 10 2 72 32 60 18 3 48 30 14 03 1 51 38 16 02 1
- 61 30 49 18 3 48 34 19 02 1 50 30 16 02 1 50 32 12 02 1
- 61 26 56 14 3 64 28 56 21 3 43 30 11 01 1 58 40 12 02 1
- 51 38 19 04 1 67 31 44 14 2 62 28 48 18 3 49 30 14 02 1
- 51 35 14 02 1 56 30 45 15 2 58 27 41 10 2 50 34 16 04 1
- 46 32 14 02 1 60 29 45 15 2 57 26 35 10 2 57 44 15 04 1
- 50 36 14 02 1 77 30 61 23 3 63 34 56 24 3 58 27 51 19 3
- 57 29 42 13 2 72 30 58 16 3 54 34 15 04 1 52 41 15 01 1
- 71 30 59 21 3 64 31 55 18 3 60 30 48 18 3 63 29 56 18 3
- 49 24 33 10 2 56 27 42 13 2 57 30 42 12 2 55 42 14 02 1
- 49 31 15 02 1 77 26 69 23 3 60 22 50 15 3 54 39 17 04 1
- 66 29 46 13 2 52 27 39 14 2 60 34 45 16 2 50 34 15 02 1
- 44 29 14 02 1 50 20 35 10 2 55 24 37 10 2 58 27 39 12 2
- 47 32 13 02 1 46 31 15 02 1 69 32 57 23 3 62 29 43 13 2
- 74 28 61 19 3 59 30 42 15 2 51 34 15 02 1 50 35 13 03 1
- 56 28 49 20 3 60 22 40 10 2 73 29 63 18 3 67 25 58 18 3
- 49 31 15 01 1 67 31 47 15 2 63 23 44 13 2 54 37 15 02 1
- 56 30 41 13 2 63 25 49 15 2 61 28 47 12 2 64 29 43 13 2
- 51 25 30 11 2 57 28 41 13 2 65 30 58 22 3 69 31 54 21 3
- 54 39 13 04 1 51 35 14 03 1 72 36 61 25 3 65 32 51 20 3
- 61 29 47 14 2 56 29 36 13 2 69 31 49 15 2 64 27 53 19 3
- 68 30 55 21 3 55 25 40 13 2 48 34 16 02 1 48 30 14 01 1
- 45 23 13 03 1 57 25 50 20 3 57 38 17 03 1 51 38 15 03 1
- 55 23 40 13 2 66 30 44 14 2 68 28 48 14 2 54 34 17 02 1
- 51 37 15 04 1 52 35 15 02 1 58 28 51 24 3 67 30 50 17 2
- 63 33 60 25 3 53 37 15 02 1
- ;
- run;
- *\il s'agit d'une table contenant 5 variables, les 4 premieres étant quantitatives et la derniere qualitative a trois modalites.\*;
- *\pour faire apparaitre le coage demandé, voilà commetn procéder\*;
- *\on definit le format par la procedure format\*;
- proc format;
- value specname
- 1='Setosa '
- 2='Versicolor'
- 3='Virginica ';
- run;
- *\on l'iclut dans une etape data\;
- data iris2;
- set iris;
- format Species specname.;
- symbol = put(species, specname10.);
- run;
- proc print;
- run;
- proc cluster data=iris2 method=ward print=15;
- var petal: sepal:;
- copy species;
- run;
- *\la procedure cluster comme son nom l'indique permet de regourper les donnees en groupes.\*;
- *\ici il s'agit de la methode de classification hierarchique ascendante qui regroupe au fur et à mesure les individus 2 par 2\*;
- *\au départ, il y a autant de groupes que d'individus, puis selon un procede d'agregation base sur une distance (ici la distance de\*;
- *\ward, à la premier etape on regorupe les deux groupes qui sont les plus proches au sens de la distance. Il y a alors (n-1) groupes\*,
- n etant le nombre d'individus au depart.\*;
- *\on recalcule les distances entre tous les groupes et on agrege les deux les plus proches et ainsi de suite jusqu'a n'avoir\*;
- *\plus qu'un groupe\*;
- *\l'option var dit sur quelles variables SAS doit se baser pour calculer une distance\*;
- *\petal: veut dire toutes les variables commencant par petal\*;
- *\en sortie, on a les valeurs propres de la matrice de covariance\*;
- *\mais surtout l'historique de l'aggregation\*;
- *\attention du fait de l'option print=15 seules les 15 derniers regroupements sont affiches\*;
- *\la colonne NCL affiche le nombre de groupe a l'etape courrante\*;
- *\les deux colonnes suivantes indiques quels sont les groupes qui ont ete associes pour former celui en cours\*;
- *\si cl. alors c'est que l'on considerait un groupe, si ob. c'est que le groupe n'est qu'une observation\*;
- *\la colonne freq indique le nombre d'observation dans le groupe courant\*;
- *\puis ensuite viennent des operateurs dont vous n'avez pas besoin de connaître les particularité\*;
- *\attention, il y a des informations qui sont stockees dans une base\*;
- *\pour le voir, il suffit de demander une impression de la derniere base creee\*;
- proc print;
- run;
- *\dans cette base, beaucoup plus d'information que ce qui a ete vu au simple affichage :\*;
- *\name : nom du groupe*\;
- *\parent : quel groupe va l'absorber, donc son parent\*;
- *\ncl : nombre de groupes à ce niveau\*;
- *\freq : le nombre d'observation dans le groupe considere\*;
- *\height : la hauteur du regroupement, ce qui n'est rien d'autre que la distance entre les deux groupes qui l'ont constitue\*;
- *\ensuite, vous pouvez oublier\*;
- *\juste : les valeurs dans les colonnes portant le nom des variables sont celles asociées au barycentre du groupe\*;
- *\a partir de cette sortie, vous pouvez faire une representation graphique, par SAS et par vous-meme\*;
- *\pour donner un nom a la base constitue par defaut\*;
- proc cluster data=iris2 method=ward print=15 outtree=base1;
- var petal: sepal:;
- copy species;
- run;
- proc print data=base1;
- run;
- *\on retrouve bien la meme chose\*;
- proc tree ncl=3 out=out;
- copy petal: sepal: species;
- run;
- *\cette procedure travaille sur la base issue de proc cluster\*;
- proc tree data=base1 ncl=3 out=out;
- copy petal: sepal: species;
- run;
- *\ceci vous permet de faire la representation graphique encore appelee dendrogramme\*;
- *\ncl=3 veut dire que l'on constitue 3 groupes donc que l'on met un seuil horizontal de façon a avoir 3 groupes\*;
- *\aucune incidence sur le graphique mais sur la sortie oui\*;
- proc print;
- run;
- *\dans la base out, vous avez pour chaque observation son nom, la valeur des variables et de l'espece du fait de l'option copy\*;
- *\le groupe dans lequel se situe l'observation parmis les 3 et le nom de ce groupe\*;
- proc candisc noprint out=can;
- class cluster;
- var petal: sepal:;
- run;
- *\rien ne s'affiche car noprint\*;
- *\class permet de declarer une variable qualitative : ici cluster donc on travaille en fait sur la base issue de la procedure tree\*;
- proc candisc data=out noprint out=can;
- class cluster;
- var petal: sepal:;
- run;
- *\cette modification ne change rien mais leve toute ambiguite\*;
- *\ceci permet de realiser une analyse (canonique) discriminante\*;
- *\l'idee est identique a celle de l'analyse en composantes principales dans le sens ou l'on cherche des combinaisons lineaires\*;
- *\des variables qui permettent de representer au mieux les donnees, au mieux etant au sens de discirminer (separer) le plus possible\*;
- *\les classes de la variable qualitative\*;
- legend1 frame cframe=ligr cborder=black
- position=center value=(justify=center);
- axis1 label=(angle=90 rotate=0) minor=none;
- axis2 minor=none;
- proc gplot;
- plot can2*can1=cluster /
- frame cframe=ligr legend=legend1 vaxis=axis1 haxis=axis2;
- run;
- *\ceci produit un graphique haute resolution sur le premier plan factoriel, a savoir les deux premiers axes de l'analyse discriminante\*;
- *\ces axes, on les voit dans la sortie out de la procedure candisc\*;
- proc freq;
- tables cluster*species;
- run;
- *\ceci permet d'avoir un resume de la composition des groupes\*;
- data tirage;
- do i=1 to 150;
- a=ranbin(-1,1,2/15);
- output;
- keep a;
- end;
- run;
- *\je simule 150 bernoulli de parametre 2/15\*;
- *\2/15 car je ne veux conserver qu'une vingtaine d'observations sur les 150 et donc je souhaite garder celles pour lequel\*;
- *\ma simulation m'aura donne 1\*;
- *\une binomiale de parametres n=1 et p n'est rien d'autre qu'une bernoulli de parametre p\*;
- *\le -1 est pour obtenir une initialisation des simulations basee sur l'horloge de la machine\*;
- data iris4;
- set iris;
- set tirage;
- run;
- proc print;
- run;
- *\on constate que cela m'a permis de faire une concatenation horizontale des bases iris et tirage\*;
- *\attnetion set iris tirage aurait provoque une concatenation verticale\*;
- data iris5;
- set iris4(where=(a=1));
- run;
- proc print;
- run;
- proc cluster data=iris5 method=ward print=15 outtree=base2;
- var petal: sepal:;
- copy species;
- run;
- data malib.base2;
- set base2;
- run;
- proc print;
- run;
- *\on peut verifier par :\*;
- *\attention tirage aleatoire donc vous n'allez pas retomber sur les memes, d'ou la table base2\*;
- proc tree ncl=3 out=out;
- copy petal: sepal: species;
- run;
- /*. :) */
Add Comment
Please, Sign In to add comment