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

SAS Base Discussion :

Vérifier qu'un numérique peut s'écrire sous un format donné


Sujet :

SAS Base

  1. #1
    Membre habitué
    Inscrit en
    Juin 2005
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 207
    Points : 161
    Points
    161
    Par défaut Vérifier qu'un numérique peut s'écrire sous un format donné
    Bonjour à tous,

    Cela fait pas mal de temps que je fais du SAS, et je viens de tomber sur un problème assez intéressant à résoudre, et malheureusement, je n'ai pas encore trouvé de solution élégante à ce problème

    Savez vous comment faire pour vérifier qu'un numérique peut s'écrire sous un format donné?

    Prenons un exemple simple. Je désire vérifier que des données numériques dans un dataset peuvent s'écrire avec un format 6.2:

    123.45 => OK
    1.011 => NOK
    12345 => NOK
    0.45 => OK

    La seule solution que j'ai pu trouver, pour le moment, c'est de convertir les données en chaine de caractères, afin d'utiliser la fonction SCAN me permettant d'extraire les composantes entières et décimales de mes numériques. Ensuite, en testant la taille de ces composantes, je détermine si le numérique peut être ou non représenté sous un format donné.

    Exemple:
    1) conversion de 123.45 => "123.45"
    2) Utilisation de la fonction SCAN pour récupérer les composantes entières ("123") et décimales ("45")
    3) Utilisation de la fonction LENGTH pour déterminer que la taille de la composante entière est inférieure à 4 et que la taille de la composante décimale est inférieure à 3.

    Bref, beaucoup d'étapes à mon sens pour faire une simple vérification

    Si vous avez mieux, je suis preneur !!!

    Merci

  2. #2
    Membre éclairé
    Homme Profil pro
    responsable adjoint service stat
    Inscrit en
    Mars 2009
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : responsable adjoint service stat
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2009
    Messages : 448
    Points : 823
    Points
    823
    Par défaut
    Voilà une alternative, plus "mathématique" et avec je pense moins de temps de traitement
    1/ Definition des macros variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    %let format = 6.2 ;
    %let decimal = %scan(&format.,2,.);
    %let dizaine = %eval (%scan(&format.,1,.) - &decimal) ;
    2/ Vérification
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    data test ;
        i =   123.45  ; output ;
        i =     1.011 ; output ; 
        i = 12345     ; output ;
        i =     0.45  ; output ;
    run ;
    data test2 ;
        set test ;
        PB_DIZAINE = ( i >= 10 ** &dizaine. ) ;
        PB_DECIMAL = (i ne round (i, 10 ** (- &decimal)) );
        PB = PB_DIZAINE or PB_DECIMAL ;
        put i= @15 PB= @20 '( ' PB_DIZAINE= PB_DECIMAL= ' )' ;
    run ;

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 747
    Points : 978
    Points
    978
    Par défaut
    je propose une solution plus simple:

    tu transforme en caractere et puis tu relis le caractere avec l'informat:

    Exemple sur le format 6.2
    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
    proc sql;
       create table WORK.NUMS
       (n num)
       ;
       insert into WORK.NUMS
       values(123.45)
       values(1.011)
       values(12345) 
       values(0.45)
       values(12345678900)
       ;
    quit;
     
    data _NULL_;
       set WORK.NUMS;
       test = (n = input(put(n, 6.2), ?? 6.2));
       put test = n=6.2;
    run;
    Exemple sur le format ddmmyy10.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    data _NULL_;
       set WORK.NUMS;
       n = int(n * 100);
       test = (n = input(put(n, ddmmyy10.), ?? ddmmyy10.));
       put test = n= ddmmyy10.;
    run;
    le problème : l'informat n'existe pas forcement pour tous les formats

    xav

Discussions similaires

  1. Peut-on écrire en arabe dans Latex ?!
    Par bnadem35 dans le forum Débuter
    Réponses: 5
    Dernier message: 16/07/2009, 10h43
  2. [VBa-E] Peut-on écrire dans un fichier txt?
    Par gootsu dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/07/2006, 12h34
  3. sql serveur 6.5 peut-être installé sous windows 2000?
    Par jyms2006 dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 20/03/2006, 19h37
  4. [HTML]Peut-on écrire un texte sur une image ?
    Par flogreg dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 28/02/2005, 17h24

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