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

Macro Discussion :

Exécution du même programme sas, pour plusieurs macro variables


Sujet :

Macro

  1. #1
    Candidat au Club
    Inscrit en
    Février 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Exécution du même programme sas, pour plusieurs macro variables
    Bonjour à vous tous,

    Je vous envoie cette requête, pour voir avec vous est ce que je peux exécuter un programme sas automatiquement. en passant d'un paramètre à un autre.

    Je m'explique;

    j'ai un programme sas sous la forme suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    %let table =table_1 ;
     
    proc univariate data=&table ;
    run ;
    De ce programme j'aimerai l'exécuter pour 1000 table [une après l'autre] tout en gardant les 1000 résultats de la proc univariate, tout en donant un signal après chaque exécution.

  2. #2
    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
    Un signal ?

    Sinon pour le reste tu peux enregistrer soit une table en sortie soit un document spécifique à ta table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    %let TABLE =table_1 ;
     
    ODS rtf file="c:\temp\&table..rtf";
     
    proc univariate DATA=&table ;
    run ;
     
    ODS rtf close;
    Reste à nous expliquer où se trouvent tes 1000 tables ou bien comme tu imaginais les appeler...

  3. #3
    Candidat au Club
    Inscrit en
    Février 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Slt,
    Je pense que j'ai mal transmis mon message, en fait les noms de mes tables sont stockés dans une autre table ; cette table .sas7bcat se présente comme suit ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    data tables ;
    input nom_de_table ;
    datalines ;
    table_1
    table_2
    table_3
    table_4
    .
    .
    .
    table_1000 ;
    run ;
    Donc ce que j'aimerai faire c'est d'exécuter un programme de type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    proc univariate data=&table ;
    run ;
    de cette manière je vais avoir 1000 éxécutions,

    une fois je lance mon programme sas doit appeller la table qui suit: et entre chaque éxécution un signal (une tonalité par exemple ). est ce possible.


    Merci bp.

  4. #4
    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
    cette table .sas7bcat
    Alors soit c'est un catalogue sasbcat, soit une table sas7bdat.

    Je t'invite à regarder le CALL EXECUTE qui permet de lire une table et d'utiliser les colonnes comme paramètres à une procédure ou une macro etc.
    Tu vas créer une seconde colonne avec le nom de la table en sortie correspondant au nom de la table en entrée et le tour est joué.

    pour la tonalité, je vois pas trop l'utilité mais regarde cela http://support.sas.com/documentation...rout-sound.htm

  5. #5
    Candidat au Club
    Inscrit en
    Février 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Serait il possible de m'indiquer une solution explicite sur la base d'un exemple,
    parce l'exécution bloque et si jamais ça marche je trouverais du mal à localiser mes output sas.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 747
    Points : 978
    Points
    978
    Par défaut
    envoie ton code qui "bloque", pour voir ce que tu as fait

  7. #7
    Candidat au Club
    Inscrit en
    Février 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Rebonjour,

    Puisque je suis début sur l'outil SAS, j'arrive pas à automatiser mon programme qui doit s'exécuter pour chaque table, et stocker les résultats de chaque exécution dans des tables séparer.

    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
    data tables ;
    input num_table ;
    datalines ;
    table1
    table2
    table3
    table4
    table5
    table6
    table7
    ;
    run ;
    %macro exe ;
    proc univariate data=table&i ;
    output out=table&i_result ;
    run ;
    %mend ;
    %exe ;

  8. #8
    Membre régulier
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Avril 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2008
    Messages : 69
    Points : 86
    Points
    86
    Par défaut
    Bonjour

    Tu peux faire quelque chose comme ça, il reste à mettre les bons paramètres pour la proc UNIVARIATE, pour le code je l'ai fait avec la proc SORT mais tu peux utiliser n'importe quelle procédure avec les bons paramètres:

    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
    data table1 table2 ;
    	x="class3" ; y=2 ; output table1 ;
    	x="class1" ; y=5 ; output table1 ;
    	x="class2" ; y=7 ; output table1 ;
     
    	x="class3" ; y=3 ; output table2 ;
    	x="class1" ; y=2 ; output table2 ;
    	x="class2" ; y=1 ; output table2 ;
    run ;
     
    DATA TABLES ;
    input num_table $20. ;
    datalines ;
    table1
    table2
    ;
    run ;
     
    %macro tables() ;
    data _null_ ;
    	set tables end=fin ;
    	call symput(compress("table" || _N_), num_table) ;
    	if fin then call symput ('n', _N_) ;
    run ;
    %do i=1 %to &n. ;
    	%put &&table&i.. ;
    	proc sort DATA=&&table&i.. out=%sysfunc(compress("&&table&i.._result")) ;
    	by x ;
    	run ;
    %end ;
    %mend ;
     
    %tables ;

    Bon courage!

  9. #9
    Membre régulier
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Avril 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2008
    Messages : 69
    Points : 86
    Points
    86
    Par défaut
    une autre version sans utiliser la fonction %sysfunc

    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
    data table1 table2 ;
    	x="class3" ; y=2 ; output table1 ;
    	x="class1" ; y=5 ; output table1 ;
    	x="class2" ; y=7 ; output table1 ;
     
    	x="class3" ; y=3 ; output table2 ;
    	x="class1" ; y=2 ; output table2 ;
    	x="class2" ; y=1 ; output table2 ;
    run ;
     
    DATA TABLES ;
    input num_table $20. ;
    datalines ;
    table1
    table2
    ;
    run ;
     
    %macro tables() ;
    data _null_ ;
    	set tables end=fin ;
    	call symput(compress("table" || _N_), num_table) ;
    	call symput(compress("table_result" || _N_), compress(num_table || "_result")) ;
     
    	if fin then call symput ('n', _N_) ;
    run ;
    %do i=1 %to &n. ;
    	%put &&table&i.. ;
    	proc sort DATA=&&table&i.. out=&&table_result&i.. ;
    	by x ;
    	run ;
    %end ;
    %mend ;
     
    %tables ;

  10. #10
    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
    il va falloir préciser ce que tu veux faire de ta proc univariate car elle est très riche.
    Je t'invite à lire attentivement TOUTES les sorties possibles de cette PROC.

    pour ton besoin, si tu pars de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ods output BasicMeasures = matable; 
    proc univariate data= sashelp.class ; var _numeric_ ;
    run;
    et que tu dois faire tourner cela sur plusieurs tables dont les noms sont stockées dans une table, tu peux utiliser un CALL EXECUTE qui utilisera ces noms en paramètre de DATA= de la proc univariate soit en paramètre d'un macro programme.
    si tu utilises une table, l'avantage est que tu peux y stocker comme je le fais le nom de la table en sortie, des variables à analyser etc... Cette pourrait venir d'une importation d'un fichier excel dan lequel tu y rentrerais tes valeurs.
    Si tu te sens plus à l'aise avec les macros-programmes, l'utilisation en est identique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    DATA TABLES ;
    input in :$32. out :$32. ;
    datalines ;
    sashelp.class class
    sashelp.air air
    ;
    run ;
     
    data _null_;
    set tables;
    call execute ('ods output BasicMeasures ='||out||'; proc univariate data='||in||' ; var _numeric_ ; run;');
    run;

  11. #11
    Candidat au Club
    Inscrit en
    Février 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci bp pour vos réponses

Discussions similaires

  1. Boucle pour obtenir plusieurs macro variables
    Par elimaur dans le forum Macro
    Réponses: 7
    Dernier message: 19/11/2014, 13h51
  2. Réponses: 3
    Dernier message: 16/02/2012, 15h37
  3. Réponses: 3
    Dernier message: 03/09/2008, 16h47
  4. Réponses: 6
    Dernier message: 24/05/2007, 14h40
  5. Menu deroulant pour plusieurs macro
    Par ekynoxx dans le forum Général VBA
    Réponses: 8
    Dernier message: 09/05/2007, 16h59

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