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

Débutez Discussion :

Faire passer en paramètre d'une macro une liste de valeurs prises par une macro


Sujet :

Débutez

  1. #1
    Membre du Club

    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 27
    Points : 46
    Points
    46
    Par défaut Faire passer en paramètre d'une macro une liste de valeurs prises par une macro
    Bonjour,
    je cherche désespérément comment faire en sorte de passer la liste de valeurs contenues dans ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    proc freq
    data = &librairie..table noprint;
    	tables d_entree  / 
    		out = nbobs_&trigramme (rename=count=obs_&trigramme._&an);
    		where diag in ('J384' 'J385' 'J399' 'J40' 'J459' 'J680' 'J681' 'J682' 
    		'J683' 'J708' 'J709' 'J80' 'J81' 'J850' 'J960' 'J969' 'J9860' 'J988' 'J989')
    		and %sysevalf("&date_evt.&an"d-27)<=d_entree<=%sysevalf("&date_evt.&an"d+28);
    run;
    en une macrovariable ou autre fonction (ou autre 'chose', je suis tout nouveau dans le domaine) qui irait chercher tout seul cette liste dans une table sas dédiée...

    Quelqu'un a-t-il une idée???
    Merci
    T.

  2. #2
    Responsable SAS


    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Points : 16 219
    Points
    16 219
    Par défaut
    Bonjour,
    Pour t'aider tu peux déjà consulter la FAQ SAS du site ici
    Je te donne un des exemples que tu trouveras dedans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Un macro programme sert à automatiser une suite de tâches récursives.
     
    %MACRO test(var);
    proc PRINT DATA = &amp;var;run;
    proc means data=&amp;var;run;
    %MEND test;
     
    Pour utiliser votre macro vous devez d'abord la compiler en cliquant sur F8 puis taper le code suivant :
     
     
    %test(maVar);
    Les balises code
    FAQ SAS
    Rubrique SAS

    Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.

  3. #3
    Membre du Club

    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 27
    Points : 46
    Points
    46
    Par défaut
    Salut!
    Merci pour ta réponse.
    Cependant j'ai compris ce qu'était une macro.

    Le bout de code présenté est inclus dans une macro.
    L'idée est que je veux faire en sorte que la liste citée dans mon précédent message n'apparaisse pas telle quelle dans le code de la macro mais soit récupérée automatiquement au sein d'une table.
    J'ai en effet plein de listes de ce type-là auxquelles je veux appliquer mon programme, ce qui m'obligerait à répéter mon programme un grand nombre de fois (environ 60) et en le modifiant à chaque fois...

    Un tuyau?

  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
    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
    /* Si numérique */
    Proc SQL noprint;
    select MacolonneDeMaTable INTO : LIST separated By ','
    From MaTable
    ;
    quit;
    %put LIST = &LIST;
     
    /* Si caractère */
    Proc SQL noprint;
    select Quote(MacolonneDeMaTable) INTO : LIST separated By ','
    From MaTable
    ;
    quit;
    %put LIST = &LIST;
     
     
    proc freq
    DATA = &librairie..TABLE noprint;
    	TABLES d_entree  / 
    		out = nbobs_&trigramme (RENAME=count=obs_&trigramme._&an);
    		WHERE diag IN (&LIST)
    		AND %sysevalf("&date_evt.&an"d-27)<=d_entree<=%sysevalf("&date_evt.&an"d+28);
    run;
    N'oubliez pas de cliquer sur lorsque votre problème est réglé !

  5. #5
    Membre du Club

    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 27
    Points : 46
    Points
    46
    Par défaut
    Salut datametric!
    Merci de ta réponse, je ne peux pas essayer maintenant mais l'idée me plaît assez.
    Les listes sont toutes au format texte.
    Cependant je ne comprends pas la partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INTO : LIST separated BY ','
    Tu pourrais développer un peu stp?

  6. #6
    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
    je te laisse le plaisir de le découvrir en exécutant le petit bout de code avec le %PUT et tu comprendras vite. Regarde dans l'aide sinon.
    N'oubliez pas de cliquer sur lorsque votre problème est réglé !

  7. #7
    Membre du Club

    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 27
    Points : 46
    Points
    46
    Par défaut
    ok alors vivement demain!

  8. #8
    Membre du Club

    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 27
    Points : 46
    Points
    46
    Par défaut
    ca marche trop bien, exactement ce que je voulais!!!
    Je pense mettre chaque liste dans une fichier excel propre que j'importe, et je voudrais appliquer cette recette miracle pour chacun d'entre eux.

    Sais-tu par hasard s'il existe une commande simple pour appliquer ce bout de code à tous les fichiers d'un dossier?
    Sinon je pense faire une boucle do en indiquant dans une table le nombre de fois aue la boucle doit être executée (mais je ne sais pas si je suis bien clair en disant cela...)

  9. #9
    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
    Sais-tu par hasard s'il existe une commande simple pour appliquer ce bout de code à tous les fichiers d'un dossier?
    Tu crées une macro variable contenant ta liste. Si la liste est la même à chaque appel de macro, applique la macro variable. Si la liste est changée, mets la macro variable à jour (en rééxécutant la proc sql).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. faire passer des paramètres pour fonction d'upload
    Par adeltimple dans le forum Langage
    Réponses: 10
    Dernier message: 16/02/2009, 18h56
  2. Réponses: 2
    Dernier message: 21/07/2007, 01h12
  3. Réponses: 3
    Dernier message: 26/06/2007, 18h00
  4. Faire renvoyer une valeur 'true' par une methode ?
    Par patthepat dans le forum Ruby on Rails
    Réponses: 3
    Dernier message: 10/05/2007, 05h51
  5. [Conception] Faire une somme de valeurs définies par une boucle
    Par fixbraun dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 25/09/2006, 23h46

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