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 :

Somme de macro-variables dont des valeurs manquantes


Sujet :

Macro

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2012
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Somme de macro-variables dont des valeurs manquantes
    Bonjour,

    La fonction sum() permet de sommer des valeurs même si certaines sont manquantes.

    Ainsi la valeur de somme sera 2 dans l'exemple suivant même si y est manquant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    data test;
           x=2;
           y=.;
           somme = sum(x,y);
    run;
    Mais comment procéder dans le cas de macros variables à sommer donc certaines pourraient être manquantes.

    Par exemple le code suivant ne fonctionne pas parce que val2 est manquante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    %let val1 = 6;
    %let val2 = ;
    %let somme =%sysfunc(sum(&val1, &val2));
    La .log dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ERROR: %SYSEVALF function has no expression to evaluate.
    ERROR: Argument 2 to function SUM referenced by the %SYSFUNC or %QSYSFUNC macro function is not a number.
    ERROR: Invalid arguments detected in %SYSCALL, %SYSFUNC, or %QSYSFUNC argument list.  Execution of %SYSCALL statement
           or %SYSFUNC or %QSYSFUNC function reference is terminated.

    merci de votre aide !!

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 114
    Points : 158
    Points
    158
    Par défaut
    Bonjour,

    il faut que tu indiques que ta seconde macro variable est manquante en mettant un point, comme tu l'as fait dans l'étape DATA

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    %LET VAL1=6;
    %LET VAL2=.
    % LET SOMME=%SYSFUNC(SUM(&VAL1,&VAL2));

  3. #3
    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,
    comme solution de contournement, tu peux mettre un '0' devant les noms de tes macros variables lors de l'appel à la fonction SUM:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    %let val1=6;                                                                                                                            
    %let val2= ;                                                                                                                            
    %let somme=%sysfunc(sum(0&val1,0&val2));
    La solution proposée par Ibrahima13 ne marche pas chez moi, ça génère des erreurs dans la log:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       %LET VAL1=6;
       %LET VAL2=.
       % LET SOMME=%SYSFUNC(SUM(&VAL1,&VAL2));
    ERROR: %SYSEVALF function has no expression to evaluate.
    ERROR: Argument 2 to function SUM referenced by the %SYSFUNC or %QSYSFUNC macro
           function is not a number.
    ERROR: Invalid arguments detected in %SYSCALL, %SYSFUNC, or %QSYSFUNC argument list.
            Execution of %SYSCALL statement or %SYSFUNC or %QSYSFUNC function reference
           is terminated.

  4. #4
    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
    La solution proposée par Ibrahima13 ne marche pas chez moi, ça génère des erreurs dans la log
    En fait ça marche mais il manque un ';' dans la 2ème ligne de code , donc ça devient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    %LET VAL1=6;                                                                                                                            
    %LET VAL2=.;                                                                                                                            
    %LET SOMME=%SYSFUNC(SUM(&VAL1,&VAL2));

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/04/2014, 10h40
  2. [Sources/Macros] Remplacement des valeurs manquantes d'une table par 0 : macro M_Zero
    Par fafabzh6 dans le forum Contribuez
    Réponses: 0
    Dernier message: 14/04/2014, 15h14
  3. Concaténation de variables contenant des valeurs manquantes
    Par Lilouche52 dans le forum SAS Base
    Réponses: 9
    Dernier message: 01/06/2011, 14h26
  4. renseigner des valeurs manquantes
    Par mouche dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 25/05/2007, 12h00
  5. [variables] Tester des valeures à 1 ou 2
    Par elitemedia dans le forum Langage
    Réponses: 5
    Dernier message: 04/12/2006, 20h03

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