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 :

Sélectionner toutes les observations une à une d'une var donnée dans une table


Sujet :

Macro

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 47
    Points : 21
    Points
    21
    Par défaut Sélectionner toutes les observations une à une d'une var donnée dans une table
    Bonjour,

    Je viens à vous car j'ai un petit souci avec une macrovariable.
    Je souhaite pouvoir inserer le Nom (variable Nom de la table ONE) de chaque client dans le mail que ce dernier recoit.
    Et uniquement son nom à lui. Pas ceux des autres.
    Exemple :
    Dans le corps du mail destiné à "AAA@gmail.com" doit figurer le nom AAAX.
    Dans celui destiné à "AAB@gmail.com" doit figurer son nom i.e AABX. Ainsi de suite...

    Vous l'aurez compris, ceci est une simplification de mon sujet.
    Tout est ok. sauf la création de cette macro variable. Je pense que c'est au niveau de la boucle que se trouve le souci.

    Je vous en remercie.


    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
    /******* Creation d'une table fictive ********/
    Data one;
    length Courriel $ 30;
    length Nom $ 30;
    input Nom $ num1 Courriel $ num2;
    datalines;
    AAAX 2 AAA@gmail.com 3
    AABX 5 AAB@gmail.com 6
    AACX 4 AAC@hotmail.com 8
    ABAX 3 ABA@gmail.com 7
    ;
    run;
     
    /******* Creation des macrovar *********/
    Data _null_;
    	Set One;
    	Call symput("mvNB",left(put(_n_,3.))) ;
    	Call symput("mvNom" !! left(put(_n_,3.)) ,left(trim(Nom))) ;
    Run ;
     
    /********* ++++++ TENTATATIVE de boucle +++++ ***********/
    Options mprint symbolgen
    %Macro Boucle ;
    	%do p = 1 %to &mvNB. ;
    	%Let Name= &&mvNOM&p;
    	%end ;
    %mend ;
    %Boucle;
    %Put Name = &&mvNom&p. ;

  2. #2
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 624
    Points : 3 402
    Points
    3 402
    Par défaut
    Hello,

    Je ne suis pas sûr d'avoir compris le besoin mais il y a déjà un souci au niveau de l'affichage de ta macrovariable. Celle-ci doit être à l'intérieur du bloc %do;...;%end; et tu ne peux pas l'utiliser autrement car elle dépend du compteur &mvNB.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    %Macro Boucle ;
    	%do p = 1 %to &mvNB. ;
    	%Let Name= &&mvNOM&p;
    %Put Name = &&mvNom&p. ;
    	%end ;
    %mend ;
    %Boucle;
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 47
    Points : 21
    Points
    21
    Par défaut
    Salut S_A_M,

    D'abord merci de t'être interessé à ma demande.
    La correction proposée ne résout pas ma problématique... Ce qui veut que je n'ai pas été très clair.. ( Sorry!)

    Je cherche à afficher les modalités d'une variable (ici cette variable = NOM) une à une.
    Pas toutes les modalités de la variable NOM à la fois.
    Pas uniquement la 1ere ni uniquement la dernière non plus.
    Je ne veux pas nom plus que cette macrovarable prenne la même valeur/modalité à chaque fois.
    Mais une modalité à la fois et ce, une à une de sorte que si j'appelle la macrovariable dans un 1er mail qui sera envoyé depuis SAS &&mvNOM&p
    il faut qu'elle m'affiche le NOM correspondant à la 1ere observation.
    Dans le 2eme mail, la macrovariable (&&mvNOM&p) doit afficher la modalité correspondant à la 2eme observation dans la table ONE ( cest a dire la 2eme modalité de NOM.
    Autrement dit, il s'agit donc de creer une marcovariable dynamique qui retournera toutes les valeur de la colonne mais une à une.
    Au 1er appel de ma macrovariable , je voudrais que &&mvNOM&p retourne AAAX (car AAAX est la 1ere modalité de la variable NOM).
    Au 2eme appel, je voudrais que &&mvNOM&p retourne AABX (car AABX est la 2eme modalité de la variable NOM).
    ....
    Au 4e appel, &&mvNOM&p doit retourner ABAX.

    Le but est d'envoyer des mails personnalisé (avec le nom du client à ce dernier.)

Discussions similaires

  1. Réponses: 8
    Dernier message: 02/08/2016, 20h19
  2. Réponses: 1
    Dernier message: 10/06/2014, 18h05
  3. Mettre les données d'une colonne d'un fichier Excel dans une ArrayList
    Par kortobi dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 05/09/2012, 20h40
  4. Réponses: 2
    Dernier message: 19/05/2010, 17h20
  5. Réponses: 2
    Dernier message: 06/02/2007, 16h05

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