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 :

Boucle (%do item=1 %to &nb) dont le &nb est determiné à partir d'une table


Sujet :

Macro

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2019
    Messages : 25
    Points : 34
    Points
    34
    Par défaut Boucle (%do item=1 %to &nb) dont le &nb est determiné à partir d'une table
    Bonjour,

    J'ai mis en place une macro qui permet de boucler sur différents catalogues.
    La macro fait les étapes suivantes pour chaque catalogue :
    1. Création d'une table Product pour chaque produit présent dans le catalogue
    2. Détermination de la dernière ligne de la table pour boucler ensuite sur chaque produit
    3. Boucler sur toutes les lignes de la table Product (%do item=1 %to &nb)
    4. Execution des instructions dans la boucle


    Mais je rencontre une erreur lorsque la table Product est vide car la boucle ne peut se realiser.
    Pouvez-vous m'aider à contourner cette erreur?

    Merci d'avance



    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
    %Macro CALC(CAT =);
     
    proc sql;
    		create table PRODUCT as
    		select distinct PRODUIT
    		from & CAT.;
     
    quit;
     
    DATA _null_;
    SET PRODUCT END=eof;
    IF eof THEN DO;
          CALL SYMPUT('nb',put(_N_,8.));
    run;
     
     
     
    %do item=1 %to &nb;
     
    …
     
    %end;
     
     
     
    %mend;
     
    % CALC (CAT= CAT_&&SuffixDate);

  2. #2
    Membre du Club
    Femme Profil pro
    Formatrice en SAS (en ligne)
    Inscrit en
    Mai 2019
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Formatrice en SAS (en ligne)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2019
    Messages : 28
    Points : 46
    Points
    46
    Par défaut
    Bonjour,

    Je m'interroge toujours de l'utilité de créer une macro si elle ne soit être appelée qu'une seule fois.
    C'est souvent compliquer inutilement le programme.
    Que réalises-tu à l'intérieur de ta boucle ?

    Sinon, depuis SAS 8.2, on a call symputx pour ne plus avoir à convertir en caractère le second argument de la fonction.

    Enfin, pour répondre à ta question :
    il manque une initialisation de la macro variable avec par exemple un %let nb = 0; au début du programme.
    et un %if &nb.= 0 %then....

    Véronique

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/11/2019, 12h38
  2. Réponses: 12
    Dernier message: 12/07/2011, 18h19
  3. Réponses: 5
    Dernier message: 07/09/2007, 17h23
  4. Pb pour afficher une image dont le lien est un champ d'une table
    Par h4milton dans le forum SQL Procédural
    Réponses: 13
    Dernier message: 25/05/2007, 13h23
  5. [VBA-E]ouvrir un fichier dont le nom est determiné par sa date de création
    Par olivertwist dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 17/04/2007, 17h29

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