IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SAS AF et formulaires Discussion :

[APPLI MENU]fenêtre menu


Sujet :

SAS AF et formulaires

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 117
    Points : 17
    Points
    17
    Par défaut [APPLI MENU]fenêtre menu
    bonjour,
    j'ai un TP noté sur SAS et j'ai réussi à me procurer l'examen de l'année derniére que j'ai essayé de faire.
    donc le but de l'examen et de faire une fenêtre menu dans laquelle l'utilisateur pourrra chsoir ces donnés, les afficher et choisir l'une des méthodes d'analyse(acp, afc et afd).
    sachant que si l'utilisateur choisi 2(afficher) ou 3(réalisation méthode) il faut lui afficher une fênetre d'erreur.

    mon soucis est que tous mes macro programme marche , sauf que le macro programme principale ne fonctionne pas comme il faut:

    quand je choisis 4 , il ferme la fenêtre.donc c'est ok.
    quand je choisis 2 ou 3 il affiche bien la fenetre d'erreur;
    quand je choisis 1, ça affiche ma fenetre de saisie,et ça crée bien la table;
    sauf que aprés si je choisis 2(pour afficher ma table) il m'affiche le feêtre d'erreur et affiche aprés le table sur le log.
    pareil pour 3, il affiche erreur d'abord avant d'afficher ce qu'il faut.

    merci pour vos réponses.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    142
    libname examen 'C:\Users\MOI\Desktop\tp SAS';
     
    /*creation de la fenetre menu*/
     
    %window menu
    #4 @28 "Menu"
    #7 @5 "1:Saisie des donnees"
    #8 @5 "2:Affichage des donnees"
    #9 @5 "3:Realisation de l'analyse appropriee"
    #10 @5 "4:sortie"
    #11 @5 "Quel est votre choix:" 
            @30 choix 1 attr=underline
    #16 @5 "tapez entree pour continuer";
    %display menu;
     
     
    /*creation de la fenetre IMPORT*/
     
    %window IMPORT
    #4 @20 "Saisie des donnees"
    #7 @5 "chemin complet de la table:"@35 chemin 50 attr=underline
    #8 @5 "nom de l'identifiant:"@35 id 20 attr=underline
    #11 @5 "tapez sur entree pour continuer";
    %display IMPORT;
     
    /*creation de la fenetre nonsaisie*/
     
    %window nonsaisie
    #4 @28 "Erreur 11"
    #7 @5 "vous n''avez pas encors saisie des donnees"
    #11 @5 "Tapez entree pour continuer";
    %display nonsaisie;
     
    /*fenetre question*/
    %window question
    #3 @15 "Repondez SVP"
    #7 @5 "1:Est ce que vous avez 2 varibles groupe" 
    #9 @5 "2:Est ce que vous avez plus de 2 varibles qualitatives"
    #11 @5 "3:Est ce que vous avez des varibles quantitatives"
    #13 @5 "Faites voter choix"
        @38 rep 1 attr=underline
    #15 @10 "Tapez sur entree pour continuer";
    %display question;
     
    %macro importation ;/*importation de fichier Excel*/
    %display IMPORT;
    proc import datafile="&chemin"
    out=mydata
    dbms=excel
    replace;
    getnames=yes;
    run;
    %mend importation;
     
     
    /*affichage de la table saisie sur le log*/
    %macro affichage;
    proc print data=mydata;
    title "etude de &chemin";
    run;
    %mend affichage;
     
    /*macro programme de chaque méthode*/ 
    /********************************************/
    /*exemple avec depart.xls*/
    %macro acp;/* juste le princomp obligatoire*/
    	proc princomp data =mydata out =individu;
    	run;
    	/*réalisation du graphique*/
    	symbol pointlabel=("#&id");
    	proc gplot data=individu;
    		plot prin2*prin1 /href=0 vref=0;
    	run;
    	quit;
    %mend acp;
     
    %macro afc;/* var obligatoire*/
    	proc corresp data=mydata   outc=tab;
    		var &id;/*ex:sepallon--fonction*/
    	run;
    /*creation de la table d'annotation pour afficher les profils lignes et colonnes en deux couleurs differentes*/
    	data anno;
    		set tab;
    		x=dim1;
    		y=dim2;
    		xsys='2';
    		ysys='2';
    		text=&id;
    	run;
    	select (_type_);
    		when ('OBS') color='red';
    		when ('VAR') color='blue';
    		otherwise;
        end;
    	run;
    	goptions reset=all;
    	proc gplot data=anno;
    		plot y*x / annotate=anno vref=0 href=0;
    	run;
    	quit;
    %mend afc;
     
    /*exemple avec iris.xls*/
    %macro afd;/*class obligatoire*/
    	proc discrim data=mydata can out=sortie anova manova simple;
    		class &id;
    	run;
    	/*graph de l'AFD*/
    	goptions reset=all;
    	symbol1 v=plus i=none;
    	symbol2 v=dot i=none;
    	symbol3 v=+ i=none;
    	proc gplot data=sortie;
    		plot can2*can1=&id /vref=0 href=0 ;
    	run;
    	quit;
    %mend afd;
    /*macro pour grouper les trois méthodes*/
    %macro realisation;
    	%display question;
    	%if (&rep=1) %then %acp;
    	%if (&rep=2) %then %afc;
    	%if (&rep=3) %then %afd;
    %mend realisation
     
    /*programme principale*/
    %macro programme;
     %do %until (&choix=4);
         %display menu;
    	 %let firstchoice=&choix;
    	 %if((&firstchoice ne 1)&(&firstchoice ne 4)) %then %display nonsaisie;
     
    	 %if &choix=1 %then  %importation;
     
    	 %else %if &choix=2 %then  %affichage;
     
    	  		%else %if &choix=3 %then  %realisation;
     
     %end;
    %mend programme;
     
    %programme;

  2. #2
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    Bonjour,

    Tu as changé de pseudo ?

    Tu programme est pas mal..

    deux choses:

    il te manque un ; à la fin de ta macro réalisation,
    et ton importation se passe mal (j'ai un message d'erreur, à contrôler dans ta log). Je te conseille passer par un infile au lieu de la proc import.

    Bon courage,

    Manoutz

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 117
    Points : 17
    Points
    17
    Par défaut
    merci pour ta réponse.
    mais bon le but de l'examen est d'utiliser la proc import. c'est pas un choix.
    donc si t'a une idée n'hésite pas stp .
    merci

  4. #4
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    l'importation à partir de fichiers xls est souvent assez pénible en passant par la proc import. Essaye avec le format csv (ca marche).

    Par contre il y a un petit problème algorithmique dans ta macro %programme..

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 117
    Points : 17
    Points
    17
    Par défaut
    justement, c'est la macro principale qui doit gérer le fenêtre qui me pose probleme. je sais pas si mon raisonnement suivie est juste.
    donc aidez moi svp.
    merci

  6. #6
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    essaye avec ca (et essaye de voir ce qui ne va pas dans ton algo):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    %macro programme;
    %global chemin;
     %do %until (&choix=4);
         %display menu;
    	 %let firstchoice=&choix;
    	 /*%IF((&firstchoice ne 1)&(&firstchoice ne 4)) %then %display nonsaisie;	*/
     
    	 %IF &choix=1 %then  %importation;
     
    	 %else %IF &choix=2 %then  %affichage;
     
    	  		%else %IF &choix=3 %then  %realisation;
     
     %end;
    %mend programme;

  7. #7
    Rédacteur

    Homme Profil pro
    SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Inscrit en
    Avril 2009
    Messages
    2 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 2 497
    Points : 6 064
    Points
    6 064
    Par défaut
    debutsas, ne m'envoie pas de message privé pour que j'aille voir ton post, je te rassure je l'avais vu mais je Manoutz s'occupait de toi. Je suis très souvent en clientèle à jouer le pompier ici et là, je ne suis pas sédentaire en poste fixe. C'est pour cela que je ne peux pas toujours répondre dans le forum.

    Je ne me suis jamais intéressé au %window car cette façon de programmer 'old school' me paraissait désuète. Mais voilà un début de reformatage. je ne me suis occupé que de l'import et du séquencement.

    Si tu veux viser au dessus de 10 à ton TP, je te suggère de reprendre le code suivant et de le finir avec la même philosophie : il faut que tu lises la doc sur %window et %display et que tu cherches à contrôler toutes les actions des utilisateurs. De cette façon tu auras une application digne de ce nom.

    Il te faut personnaliser les %display Erreur pour chaque macro car chacune correspond à des actions spécifiques.
    Il faut que tu testes ton ID car ta table n'a pas forcément les variables attendues dans tes proc princomp mais c'est à toi de gérer cela.
    Les %display sont à bannir sauf là où tu veux qu'ils apparaissent. C'est pour cela que le programme initial enchaînait les écrans.

    Si tu es en v9 et que tu importes avec DBMS=Excel le getnames n'est pas actif. Lorsque tu importes des fichiers plats (csv, txt, ...) utilises TOUJOURS GuessingRows.

    Si ton prof ne peut pas faire planter ton application et si celle-ci est agréable à l'oeil et intelligible alors tu peux même prétendre avoir 20.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    %symdel chemin id choix rep ;
     
     
    %macro importation ;/*importation de fichier Excel*/
    %display IMPORT BLANK DELETE ;
     
    %if &chemin= %then %do; /* faire un do while */
    %display nonsaisie;
    %display IMPORT BLANK DELETE ;
    %end;
    /* créer EGALEMENT un test sur l'existence du fichier excel puis un test sur la composition du chemin fourni : a-t-on un chemin et un nom de fichier et une extension ? */
     
    %else %do;
    	proc import datafile="&chemin."
    	out=mydata
    	dbms=excel
    	REPLACE;
    	run;
    %end;
     
    %mend importation;
     
     
    /*affichage de la table saisie sur le log*/
    %macro affichage;
    ods HTML;
     
    %if %sysfunc(exist(mydata)) %then %do;
    	proc print DATA=mydata;
    	title "etude de &chemin";
    	run;
    %end;
     
    %else %do;
     
    /* Window display indiquant que la table n'existe pas */
     
    %end;
     
    %mend affichage;
     
    /*macro programme de chaque méthode*/ 
    /********************************************/
    /*exemple avec depart.xls*/
    %macro acp;/* juste le princomp obligatoire*/
    	proc princomp DATA =mydata out =individu;
    	run;
    	/*réalisation du graphique*/
    	symbol pointlabel=("#&id");
    	proc gplot DATA=individu;
    		plot prin2*prin1 /href=0 vref=0;
    	run;
    	quit;
    %mend acp;
     
    %macro afc;/* var obligatoire*/
    	proc corresp DATA=mydata   outc=tab;
    		var &id;/*ex:sepallon--fonction*/
    	run;
    /*creation de la table d'annotation pour afficher les profils lignes et colonnes en deux couleurs differentes*/
    	DATA anno;
    		SET tab;
    		x=dim1;
    		y=dim2;
    		xsys='2';
    		ysys='2';
    		text=&id;
    	run;
    	SELECT (_type_);
    		when ('OBS') color='red';
    		when ('VAR') color='blue';
    		otherwise;
        end;
    	run;
    	goptions reset=ALL;
    	proc gplot DATA=anno;
    		plot y*x / annotate=anno vref=0 href=0;
    	run;
    	quit;
    %mend afc;
     
    /*exemple avec iris.xls*/
    %macro afd;/*class obligatoire*/
    	proc discrim DATA=mydata can out=sortie anova manova simple;
    		class &id;
    	run;
    	/*graph de l'AFD*/
    	goptions reset=ALL;
    	symbol1 v=plus i=none;
    	symbol2 v=dot i=none;
    	symbol3 v=+ i=none;
    	proc gplot DATA=sortie;
    		plot can2*can1=&id /vref=0 href=0 ;
    	run;
    	quit;
    %mend afd;
    /*macro pour grouper les trois méthodes*/
    %macro realisation;
    	%display question;
    	%IF (&rep=1) %then %acp;
    	%IF (&rep=2) %then %afc;
    	%IF (&rep=3) %then %afd;
    %mend realisation;
     
    libname examen 'C:\temp';
     
    /*creation de la fenetre menu*/
     
    %window menu
    #4 @28 "Menu"
    #7 @5 "1:IMPORT des donnees"
    #8 @5 "2:Affichage des donnees"
    #9 @5 "3:Réalisation de l'analyse appropriée"
    #10 @5 "4:sortie"
    #11 @5 "Quel est votre choix:" 
            @30 choix 1 attr=underline
    #16 @5 "tapez entrée pour continuer";
     
    /*creation de la fenetre IMPORT*/
     
    %window IMPORT
    #4 @20 "IMPORTATION des donnees"
    #7 @5 "chemin complet et nom de la table (ex: c:\temp\hop.xls)  : " @70 chemin 50 attr=underline
    #8 @5 "nom de DE LA COLONNE servant d'identifiant               :"  @70 id 20 attr=underline
    #11 @5 "tapez sur entrée pour continuer";
     
    /*creation de la fenetre nonsaisie*/
     
    %window nonsaisie
    #4 @28 "Erreur 11"
    #7 @5 "Erreur de saisie dans le chemin d'importation"
    #11 @5 "Tapez entrée pour continuer";
     
    /*fenetre question*/
    %window question
    #3 @15 "Repondez SVP"
    #7 @5 "1:Est ce que vous avez 2 varibles groupe" 
    #9 @5 "2:Est ce que vous avez plus de 2 varibles qualitatives"
    #11 @5 "3:Est ce que vous avez des varibles quantitatives"
    #13 @5 "Faites voter choix"
        @38 rep 1 attr=underline
    #15 @10 "Tapez sur entree pour continuer";
     
    /*programme principal*/
    %macro programme;
     %do %until (&choix=4);
         %display menu BLANK DELETE ;
    	 %let firstchoice=&choix;
     
    	 %IF &choix=1 %then  %importation;
     
    	 %else %IF &choix=2 %then  %affichage;
     
    	  		%else %IF &choix=3 %then  %realisation;
     
     %end;
    %mend programme;
     
    %programme;
    N'oubliez pas de cliquer sur lorsque votre problème est réglé !

Discussions similaires

  1. explorer.exe qui bug, fenêtre, menu et boutons non affichés
    Par oceanbigone dans le forum Windows XP
    Réponses: 12
    Dernier message: 09/12/2008, 22h50
  2. Menu fenêtre fille
    Par Julien666 dans le forum C#
    Réponses: 2
    Dernier message: 22/03/2008, 02h19
  3. [WD10] Fenêtre - Menu système
    Par defProg dans le forum WinDev
    Réponses: 11
    Dernier message: 14/05/2007, 13h56
  4. [Windev 10] Menu Fenêtres dans Menu principal
    Par gbrion dans le forum WinDev
    Réponses: 1
    Dernier message: 27/01/2007, 13h26
  5. [C#] Menu Fenêtre/Fenêtres...
    Par papouAlain dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/01/2005, 19h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo