Club SAS Québec Index du Forum Club SAS Québec
Le Club des utilisateurs SAS de la région de Québec
 
 FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres   Groupes d'utilisateursGroupes d'utilisateurs 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

Paramétrage macro qui vérifie type de variables

 
Poster un nouveau sujet   Répondre au sujet    Club SAS Québec Index du Forum -> Gestion de données
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
ludo27



Inscrit le: 30 Nov 2009
Messages: 3
Localisation: Normandie (France)

MessagePosté le: Jeu, 31 Déc 2009 12:24    Sujet du message: Paramétrage macro qui vérifie type de variables Répondre en citant

Bonsoir,
J'essaie d'utiliser la macro suivante :

Code:
%Macro DataTyp_Numeric(MyVarIn) / store;
   %Global Flag;
   %local stVal;

   /* Par convention, l'informat d'une valeur vide est correct */
   %If &MyVarIn= %Then %Let Flag=1;

   /* Cas d'une valeur non vide */
   %If &MyVarIn ne %Then
   %Do;
      /* Cas d'une valeur constituée de blancs */
      /* Strip enlève les blancs aux extrêmités */
      %let stVal=%sysfunc(Strip(&MyVarIn));

      /* Par convention, l'informat d'une valeur composée de blancs est correct */
      %IF %LENGTH(&stVal)=0 %THEN %Let Flag=1;

      %IF %LENGTH(&stVal)>0 %THEN %DO;
         
         %let Flag=0;

          %Local j;
         /* On ôte de MyvarIn passé en paramètre les caractères constitutifs d'un nombre */
         /* i.e. espace, chiffres, virgule, point, +, - */
         /* Ensuite on compte le nombre de caractères restants  */
          %let j = %sysfunc(compress(&myvarin.," 0123456789.,+-")); 
           %IF %LENGTH(&j) eq 0 %THEN %let Flag=1;
      %END;
   %End;
%Mend;


que j'appelle grâce à un call execute dans une étape data :

Code:
If code_ ne &MyValueVide then do;CALL EXECUTE ('%DataTyp_Numeric('|| put(code, 3.) ||')'); %If &Flag ne 1 %Then %Do; code_=&MyFormatNok; %end; %Else %do; code_=&MyFormatOk; %end; end;


Cet appel me génère le message suivant :

Citation:
ERREUR: A character operand was found in the %EVAL function or %IF condition where a numeric
operand is required. The condition was: &MyVarIn=
ERREUR: The macro DATATYP_NUMERIC will stop executing.


J'ai essayé différentes syntaxes :

Code:
%STR(%')&MyString%STR(%')
'&MyString'
%eval(&MyString)


Avec %eval le message est :

Code:
ERREUR: A character operand was found in the %EVAL function or %IF condition where a numeric
        operand is required. The condition was: 1.00


sans succès.

Je tourne en rond pour essayer de trouver une syntaxe correcte.
Si quelqu'un a une idée ça me dépannerait bien.

Merci Wink
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Club SAS Québec Index du Forum -> Gestion de données Toutes les heures sont au format GMT - 4 Heures
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com