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 :

Compter nombre de décimales d'un nombre [DATA]


Sujet :

SAS Base

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Par défaut Compter nombre de décimales d'un nombre
    Bonjour,
    je dois exporter dans un fichier texte le contenu d'une table.

    Pour certains champs numériques, je dois placer un + devant le nombre s'il est positif ou nul. Je dois également combler les emplacements vides par des zéros.

    J'avais opté pour cette solution qui fonctionne bien avec des entiers :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    length stMyVar$ 8.;
    if MyVar ge 0 then stMyVar='+'||put(MyVar,z7.); else stMyVar=put(MyVar,z8.);
    Cette méthode n'exporte pas les séparateurs décimaux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if MyVar ge 0 then stMyVar='+'||put(MyVar,z7.2); else stMyVar=put(MyVar,z8.2);
    va bien fonctionner sur des nombres avec deux chiffres après la virgule.

    Je cherche une manière simple de compter le nombre de décimales d'un nombre pour récupérer cette valeur et l'injecter dans mes put.

    Sachant que MyVar est au format 8. mais que je ne sais pas pour chaque enregistrement s'il y a un séparateur décimal et le nombre de décimales après le séparateur.

    Si quelqu'un a une idée je suis preneur.

    Merci.


  2. #2
    Rédacteur

    Homme Profil pro
    SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Inscrit en
    Avril 2009
    Messages
    2 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 2 497
    Par défaut
    Pourquoi tu n'as pas créé un format avec PICTURE, il gère beaucoup de choses. Tu connais ?

  3. #3
    Membre chevronné Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Par défaut
    Citation Envoyé par datametric Voir le message
    Pourquoi tu n'as pas créé un format avec PICTURE, il gère beaucoup de choses. Tu connais ?
    Merci Stéphane,
    Oui je connais PICTURE.

    Avec l'application de cette syntaxe :

    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
    proc format;
    	picture fMy1Int low-high='9';		
    	picture fMy2Int low-high='99';		
    	picture fMy3Int low-high='999';		
    	picture fMy4Int low-high='9999';		
    	picture fMy5Int low-high='99999';		
    	picture fMy6Int low-high='999999';		
    	picture fMy7Int low-high='9999999';		
    	picture fMy8Int low-high='99999999';		
     
    	picture fMy7Dec
    		low-<0='9999.00'
    		0-high='999.00' (prefix='+')
    	;
     
    	picture fMy8Dec
    		low-<0='99999.00'
    		0-high='9999.00' (prefix='+')
    	;
    run;
    J'adapte le format en fonction de la taille de chaque champ.
    par exemple pour un champ représentant un entier sur 3 caractères :
    Pour un champ décimal sur 8 caractères avec le '+' devant si le nombre est positif ou nul :
    Quand j'ouvre la table c'est nickel par contre quand j'ouvre avec Excel ou bien que j'exporte dans un fichier ascii alors les zéros devant disparaissent.

  4. #4
    Membre Expert

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Par défaut
    utilise un put pour appliquer le format.
    au lieu de format d61 fMy7Dec.

  5. #5
    Membre chevronné Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Par défaut
    Citation Envoyé par bahraoui Voir le message
    utilise un put pour appliquer le format.
    au lieu de format d61 fMy7Dec.
    Merci Bahraoui,
    je reconvertis mes champs numériques en alphanumériques avant l'export en utilisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std61=put(d61,fMy7Dec.);
    et c'est std61 que j'écris dans le fichier ascii.

    Là je récupère bien mes zéros par contre j'ai toujours des nombres +8652.00 au lieu d'avoir +0008652.

    Même avec picture je n'arrive pas à ne pas mettre de séparateur décimal quand le nombre n'a pas de décimale.

    Je reviens au même résultat qu'avec la syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if d61 ge 0 then std61='+'||put(d61,z6.2); else std61=put(d61,z7.2);

  6. #6
    Rédacteur

    Homme Profil pro
    SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Inscrit en
    Avril 2009
    Messages
    2 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 2 497
    Par défaut
    tu aurais un jeu de données ? et le code qui fonctionne ?
    pour excel ça ne m'étonnes pas mais pour le fichier plat, si le champ dans SAS apparaît bien, il faudrait le convertir en caractère ensuite afin de figer le format.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. compter puis fixer le nombre de décimal
    Par lolothom dans le forum Access
    Réponses: 25
    Dernier message: 29/04/2009, 13h18
  2. [Nombre]formater le nombre de décimal après une virgule.
    Par PascalCmoa dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 09/03/2007, 10h40
  3. définir nombre de décimale
    Par capone dans le forum C++Builder
    Réponses: 5
    Dernier message: 08/01/2006, 14h15
  4. round avec nombre de décimale spécifiée
    Par bilb0t dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 14/04/2005, 16h44
  5. Compter le nb d'occurrences de nombres
    Par mathieu--g dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/09/2004, 16h10

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