Guest User

Untitled

a guest
May 26th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SAS 12.09 KB | None | 0 0
  1. libname malib 'c:\documents and settings\malot\sas';
  2.  
  3.  
  4.  
  5. data iris;
  6.       input SepalLength SepalWidth PetalLength PetalWidth Species @@;
  7.       label SepalLength='Sepal Length in mm.'
  8.             SepalWidth ='Sepal Width in mm.'
  9.             PetalLength='Petal Length in mm.'
  10.             PetalWidth ='Petal Width in mm.';
  11.       symbol = put(species, specname10.);
  12.       datalines;
  13.    50 33 14 02 1 64 28 56 22 3 65 28 46 15 2 67 31 56 24 3
  14.    63 28 51 15 3 46 34 14 03 1 69 31 51 23 3 62 22 45 15 2
  15.    59 32 48 18 2 46 36 10 02 1 61 30 46 14 2 60 27 51 16 2
  16.    65 30 52 20 3 56 25 39 11 2 65 30 55 18 3 58 27 51 19 3
  17.    68 32 59 23 3 51 33 17 05 1 57 28 45 13 2 62 34 54 23 3
  18.    77 38 67 22 3 63 33 47 16 2 67 33 57 25 3 76 30 66 21 3
  19.    49 25 45 17 3 55 35 13 02 1 67 30 52 23 3 70 32 47 14 2
  20.    64 32 45 15 2 61 28 40 13 2 48 31 16 02 1 59 30 51 18 3
  21.    55 24 38 11 2 63 25 50 19 3 64 32 53 23 3 52 34 14 02 1
  22.    49 36 14 01 1 54 30 45 15 2 79 38 64 20 3 44 32 13 02 1
  23.    67 33 57 21 3 50 35 16 06 1 58 26 40 12 2 44 30 13 02 1
  24.    77 28 67 20 3 63 27 49 18 3 47 32 16 02 1 55 26 44 12 2
  25.    50 23 33 10 2 72 32 60 18 3 48 30 14 03 1 51 38 16 02 1
  26.    61 30 49 18 3 48 34 19 02 1 50 30 16 02 1 50 32 12 02 1
  27.    61 26 56 14 3 64 28 56 21 3 43 30 11 01 1 58 40 12 02 1
  28.    51 38 19 04 1 67 31 44 14 2 62 28 48 18 3 49 30 14 02 1
  29.    51 35 14 02 1 56 30 45 15 2 58 27 41 10 2 50 34 16 04 1
  30.    46 32 14 02 1 60 29 45 15 2 57 26 35 10 2 57 44 15 04 1
  31.    50 36 14 02 1 77 30 61 23 3 63 34 56 24 3 58 27 51 19 3
  32.    57 29 42 13 2 72 30 58 16 3 54 34 15 04 1 52 41 15 01 1
  33.    71 30 59 21 3 64 31 55 18 3 60 30 48 18 3 63 29 56 18 3
  34.    49 24 33 10 2 56 27 42 13 2 57 30 42 12 2 55 42 14 02 1
  35.    49 31 15 02 1 77 26 69 23 3 60 22 50 15 3 54 39 17 04 1
  36.    66 29 46 13 2 52 27 39 14 2 60 34 45 16 2 50 34 15 02 1
  37.    44 29 14 02 1 50 20 35 10 2 55 24 37 10 2 58 27 39 12 2
  38.    47 32 13 02 1 46 31 15 02 1 69 32 57 23 3 62 29 43 13 2
  39.    74 28 61 19 3 59 30 42 15 2 51 34 15 02 1 50 35 13 03 1
  40.    56 28 49 20 3 60 22 40 10 2 73 29 63 18 3 67 25 58 18 3
  41.    49 31 15 01 1 67 31 47 15 2 63 23 44 13 2 54 37 15 02 1
  42.    56 30 41 13 2 63 25 49 15 2 61 28 47 12 2 64 29 43 13 2
  43.    51 25 30 11 2 57 28 41 13 2 65 30 58 22 3 69 31 54 21 3
  44.    54 39 13 04 1 51 35 14 03 1 72 36 61 25 3 65 32 51 20 3
  45.    61 29 47 14 2 56 29 36 13 2 69 31 49 15 2 64 27 53 19 3
  46.    68 30 55 21 3 55 25 40 13 2 48 34 16 02 1 48 30 14 01 1
  47.    45 23 13 03 1 57 25 50 20 3 57 38 17 03 1 51 38 15 03 1
  48.    55 23 40 13 2 66 30 44 14 2 68 28 48 14 2 54 34 17 02 1
  49.    51 37 15 04 1 52 35 15 02 1 58 28 51 24 3 67 30 50 17 2
  50.    63 33 60 25 3 53 37 15 02 1
  51.    ;
  52. run;
  53.  
  54. *\on voit dans la table donnee qu'il y a une option de format qui est incluse dans le put\*;
  55. *\donc ainsi cela ne peut pas tourner\*;
  56.  
  57. *\table corrigee\*;
  58. data iris;
  59.       input SepalLength SepalWidth PetalLength PetalWidth Species @@;
  60.       label SepalLength='Sepal Length in mm.'
  61.             SepalWidth ='Sepal Width in mm.'
  62.             PetalLength='Petal Length in mm.'
  63.             PetalWidth ='Petal Width in mm.';
  64.       datalines;
  65.    50 33 14 02 1 64 28 56 22 3 65 28 46 15 2 67 31 56 24 3
  66.    63 28 51 15 3 46 34 14 03 1 69 31 51 23 3 62 22 45 15 2
  67.    59 32 48 18 2 46 36 10 02 1 61 30 46 14 2 60 27 51 16 2
  68.    65 30 52 20 3 56 25 39 11 2 65 30 55 18 3 58 27 51 19 3
  69.    68 32 59 23 3 51 33 17 05 1 57 28 45 13 2 62 34 54 23 3
  70.    77 38 67 22 3 63 33 47 16 2 67 33 57 25 3 76 30 66 21 3
  71.    49 25 45 17 3 55 35 13 02 1 67 30 52 23 3 70 32 47 14 2
  72.    64 32 45 15 2 61 28 40 13 2 48 31 16 02 1 59 30 51 18 3
  73.    55 24 38 11 2 63 25 50 19 3 64 32 53 23 3 52 34 14 02 1
  74.    49 36 14 01 1 54 30 45 15 2 79 38 64 20 3 44 32 13 02 1
  75.    67 33 57 21 3 50 35 16 06 1 58 26 40 12 2 44 30 13 02 1
  76.    77 28 67 20 3 63 27 49 18 3 47 32 16 02 1 55 26 44 12 2
  77.    50 23 33 10 2 72 32 60 18 3 48 30 14 03 1 51 38 16 02 1
  78.    61 30 49 18 3 48 34 19 02 1 50 30 16 02 1 50 32 12 02 1
  79.    61 26 56 14 3 64 28 56 21 3 43 30 11 01 1 58 40 12 02 1
  80.    51 38 19 04 1 67 31 44 14 2 62 28 48 18 3 49 30 14 02 1
  81.    51 35 14 02 1 56 30 45 15 2 58 27 41 10 2 50 34 16 04 1
  82.    46 32 14 02 1 60 29 45 15 2 57 26 35 10 2 57 44 15 04 1
  83.    50 36 14 02 1 77 30 61 23 3 63 34 56 24 3 58 27 51 19 3
  84.    57 29 42 13 2 72 30 58 16 3 54 34 15 04 1 52 41 15 01 1
  85.    71 30 59 21 3 64 31 55 18 3 60 30 48 18 3 63 29 56 18 3
  86.    49 24 33 10 2 56 27 42 13 2 57 30 42 12 2 55 42 14 02 1
  87.    49 31 15 02 1 77 26 69 23 3 60 22 50 15 3 54 39 17 04 1
  88.    66 29 46 13 2 52 27 39 14 2 60 34 45 16 2 50 34 15 02 1
  89.    44 29 14 02 1 50 20 35 10 2 55 24 37 10 2 58 27 39 12 2
  90.    47 32 13 02 1 46 31 15 02 1 69 32 57 23 3 62 29 43 13 2
  91.    74 28 61 19 3 59 30 42 15 2 51 34 15 02 1 50 35 13 03 1
  92.    56 28 49 20 3 60 22 40 10 2 73 29 63 18 3 67 25 58 18 3
  93.    49 31 15 01 1 67 31 47 15 2 63 23 44 13 2 54 37 15 02 1
  94.    56 30 41 13 2 63 25 49 15 2 61 28 47 12 2 64 29 43 13 2
  95.    51 25 30 11 2 57 28 41 13 2 65 30 58 22 3 69 31 54 21 3
  96.    54 39 13 04 1 51 35 14 03 1 72 36 61 25 3 65 32 51 20 3
  97.    61 29 47 14 2 56 29 36 13 2 69 31 49 15 2 64 27 53 19 3
  98.    68 30 55 21 3 55 25 40 13 2 48 34 16 02 1 48 30 14 01 1
  99.    45 23 13 03 1 57 25 50 20 3 57 38 17 03 1 51 38 15 03 1
  100.    55 23 40 13 2 66 30 44 14 2 68 28 48 14 2 54 34 17 02 1
  101.    51 37 15 04 1 52 35 15 02 1 58 28 51 24 3 67 30 50 17 2
  102.    63 33 60 25 3 53 37 15 02 1
  103.    ;
  104. run;
  105.  
  106. *\il s'agit d'une table contenant 5 variables, les 4 premieres étant quantitatives et la derniere qualitative a trois modalites.\*;
  107. *\pour faire apparaitre le coage demandé, voilà commetn procéder\*;
  108. *\on definit le format par la procedure format\*;
  109. proc format;
  110.       value specname
  111.          1='Setosa    '
  112.          2='Versicolor'
  113.          3='Virginica ';
  114.    run;
  115.  
  116.    *\on l'iclut dans une etape data\;
  117.  
  118.    data iris2;
  119.    set iris;
  120.    format Species specname.;
  121.    symbol = put(species, specname10.);
  122.    run;
  123.  
  124.    proc print;
  125.    run;
  126.  
  127. proc cluster data=iris2 method=ward print=15;
  128.       var petal: sepal:;
  129.       copy species;
  130.    run;
  131.  
  132.    *\la procedure cluster comme son nom l'indique permet de regourper les donnees en groupes.\*;
  133.    *\ici il s'agit de la methode de classification hierarchique ascendante qui regroupe au fur et à mesure les individus 2 par 2\*;
  134.    *\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\*;
  135.    *\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\*,
  136.    n etant le nombre d'individus au depart.\*;
  137.    *\on recalcule les distances entre tous les groupes et on agrege les deux les plus proches et ainsi de suite jusqu'a n'avoir\*;
  138.    *\plus qu'un groupe\*;
  139.  
  140.    *\l'option var dit sur quelles variables SAS doit se baser pour calculer une distance\*;
  141.    *\petal: veut dire toutes les variables commencant par petal\*;
  142. *\en sortie, on a les valeurs propres de la matrice de covariance\*;
  143.    *\mais surtout l'historique de l'aggregation\*;
  144.    *\attention du fait de l'option print=15 seules les 15 derniers regroupements sont affiches\*;
  145.    *\la colonne NCL affiche le nombre de groupe a l'etape courrante\*;
  146.  *\les deux colonnes suivantes indiques quels sont les groupes qui ont ete associes pour former celui en cours\*;
  147.    *\si cl. alors c'est que l'on considerait un groupe, si ob. c'est que le groupe n'est qu'une observation\*;
  148. *\la colonne freq indique le nombre d'observation dans le groupe courant\*;
  149.    *\puis ensuite viennent des operateurs dont vous n'avez pas besoin de connaître les particularité\*;
  150.  
  151.    *\attention, il y a des informations qui sont stockees dans une base\*;
  152.    *\pour le voir, il suffit de demander une impression de la derniere base creee\*;
  153.  
  154.    proc print;
  155.    run;
  156.  
  157.    *\dans cette base, beaucoup plus d'information que ce qui a ete vu au simple affichage :\*;
  158. *\name : nom du groupe*\;
  159.    *\parent : quel groupe va l'absorber, donc son parent\*;
  160.    *\ncl : nombre de groupes à ce niveau\*;
  161.    *\freq : le nombre d'observation dans le groupe considere\*;
  162.    *\height : la hauteur du regroupement, ce qui n'est rien d'autre que la distance entre les deux groupes qui l'ont constitue\*;
  163.    *\ensuite, vous pouvez oublier\*;
  164.    *\juste : les valeurs dans les colonnes portant le nom des variables sont celles asociées au barycentre du groupe\*;
  165.  
  166.    *\a partir de cette sortie, vous pouvez faire une representation graphique, par SAS et par vous-meme\*;
  167.  
  168. *\pour donner un nom a la base constitue par defaut\*;
  169.  
  170.  
  171. proc cluster data=iris2 method=ward print=15 outtree=base1;
  172.       var petal: sepal:;
  173.       copy species;
  174.    run;
  175.  
  176.    proc print data=base1;
  177.    run;
  178.  
  179.    *\on retrouve bien la meme chose\*;
  180.  
  181.    proc tree ncl=3 out=out;
  182.    copy petal: sepal: species;
  183.    run;
  184.  
  185. *\cette procedure travaille sur la base issue de proc cluster\*;
  186.  
  187. proc tree data=base1 ncl=3 out=out;
  188.    copy petal: sepal: species;
  189.    run;
  190.  
  191.  
  192.    *\ceci vous permet de faire la representation graphique encore appelee dendrogramme\*;
  193.    *\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\*;
  194.    *\aucune incidence sur le graphique mais sur la sortie oui\*;
  195.  
  196.  
  197.    proc print;
  198.    run;
  199.  
  200.    *\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\*;
  201.    *\le groupe dans lequel se situe l'observation parmis les 3 et le nom de ce groupe\*;
  202.  
  203.    proc candisc noprint out=can;
  204.    class cluster;
  205.    var petal: sepal:;
  206.    run;
  207.  
  208.    *\rien ne s'affiche car noprint\*;
  209.    *\class permet de declarer une variable qualitative : ici cluster donc on travaille en fait sur la base issue de la procedure tree\*;
  210.  
  211.  
  212.    proc candisc data=out noprint out=can;
  213.    class cluster;
  214.    var petal: sepal:;
  215.    run;
  216.  
  217.    *\cette modification ne change rien mais leve toute ambiguite\*;
  218. *\ceci permet de realiser une analyse (canonique) discriminante\*;
  219.    *\l'idee est identique a celle de l'analyse en composantes principales dans le sens ou l'on cherche des combinaisons lineaires\*;
  220.    *\des variables qui permettent de representer au mieux les donnees, au mieux etant au sens de discirminer (separer) le plus possible\*;
  221.    *\les classes de la variable qualitative\*;
  222.  
  223.  legend1 frame cframe=ligr cborder=black  
  224.            position=center value=(justify=center);
  225.    axis1 label=(angle=90 rotate=0) minor=none;
  226.    axis2 minor=none;
  227.    proc gplot;
  228.       plot can2*can1=cluster /  
  229.          frame cframe=ligr legend=legend1 vaxis=axis1 haxis=axis2;    
  230.    run;
  231.  
  232.    *\ceci produit un graphique haute resolution sur le premier plan factoriel, a savoir les deux premiers axes de l'analyse discriminante\*;
  233.    *\ces axes, on les voit dans la sortie out de la procedure candisc\*;
  234.  
  235.    proc freq;
  236.    tables cluster*species;
  237.    run;
  238.  
  239.    *\ceci permet d'avoir un resume de la composition des groupes\*;
  240.  
  241.    data tirage;
  242.    do i=1 to 150;
  243.    a=ranbin(-1,1,2/15);
  244.    output;
  245.    keep a;
  246.    end;
  247.    run;
  248.  
  249.    *\je simule 150 bernoulli de parametre 2/15\*;
  250.    *\2/15 car je ne veux conserver qu'une vingtaine d'observations sur les 150 et donc je souhaite garder celles pour lequel\*;
  251.    *\ma simulation m'aura donne 1\*;
  252.    *\une binomiale de parametres n=1 et p n'est rien d'autre qu'une bernoulli de parametre p\*;
  253.    *\le -1 est pour obtenir une initialisation des simulations basee sur l'horloge de la machine\*;
  254.  
  255.    data iris4;
  256.    set iris;
  257.    set tirage;
  258.    run;
  259.  
  260.    proc print;
  261.    run;
  262.  
  263.    *\on constate que cela m'a permis de faire une concatenation horizontale des bases iris et tirage\*;
  264.    *\attnetion set iris tirage aurait provoque une concatenation verticale\*;
  265.  
  266. data iris5;
  267. set iris4(where=(a=1));
  268. run;
  269.  
  270. proc print;
  271. run;
  272.  
  273. proc cluster data=iris5 method=ward print=15 outtree=base2;
  274.       var petal: sepal:;
  275.       copy species;
  276.    run;
  277.  
  278.    data malib.base2;
  279.    set base2;
  280.    run;
  281.  
  282.  
  283.  
  284.  
  285. proc print;
  286. run;
  287.  
  288.  
  289. *\on peut verifier par :\*;
  290. *\attention tirage aleatoire donc vous n'allez pas retomber sur les memes, d'ou la table base2\*;
  291.  
  292. proc tree ncl=3 out=out;
  293.    copy petal: sepal: species;
  294.    run;
  295.  
  296.  
  297.  
  298. /*.   :) */
Add Comment
Please, Sign In to add comment