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 :

Extraire les deux chiffres après la virgule


Sujet :

SAS Base

  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 60
    Points : 49
    Points
    49
    Par défaut Extraire les deux chiffres après la virgule
    Bonjour,
    j'ai une colonne numérique du style 12340,20 (mais peut être 45,20 ou 145,20....)
    Je cherche à créer une colonne calculée avec seulement 0,20 toujours en numérique.
    Quelqu'un a une solution ?
    D'avance merci

  2. #2
    Membre régulier
    Femme Profil pro
    Chargée d'études
    Inscrit en
    Septembre 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargée d'études
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2015
    Messages : 22
    Points : 107
    Points
    107
    Par défaut
    Bonjour,

    Il existe peut être une autre solution mais voici ce que je propose:
    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
    data a;
    input v1 ;
    cards;
    12340.20
    45.20
    145.20
    ;
    run;
     
    data b;
    set a;
    v2=scan(put(v1,8.2),2,'.');
    v3=input(cats('0.',v2),8.);
    format v1 v3 8.2;
    run;
    Le résultat est la variable numérique v3.

    Bonne journée,

  3. #3
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 60
    Points : 49
    Points
    49
    Par défaut C'est bien ce que je cherche à faire.
    Merci beaucoup,
    C'est bien ce que je cherche à faire.
    Toutefois mes nombres sont dans une table qui fait plusieurs millier de ligne dans une colonne nommée Montant.
    Comment récupérer les données ? (je ne maitrise pas trop les DATA)
    Merci de ta réponse.

  4. #4
    Membre éprouvé
    Avatar de Stackware
    Homme Profil pro
    ArchiDuc de la Sasserie
    Inscrit en
    Juillet 2013
    Messages
    439
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ArchiDuc de la Sasserie
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2013
    Messages : 439
    Points : 1 017
    Points
    1 017
    Billets dans le blog
    4
    Par défaut
    Il est également possible de calculer :
    v1 = montant
    v2 = partie entière
    v3 = partie décimale

    Le calcul :
    v2 = int(v1)
    v3 = v1-v2

    Ou bien :
    v3 = v1 - int(v1)

  5. #5
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 60
    Points : 49
    Points
    49
    Par défaut Tellement simple que je n'y avais pas pensé Un grand merci
    Citation Envoyé par Stackware Voir le message
    Il est également possible de calculer :
    v1 = montant
    v2 = partie entière
    v3 = partie décimale

    Le calcul :
    v2 = int(v1)
    v3 = v1-v2

    Ou bien :
    v3 = v1 - int(v1)

  6. #6
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 60
    Points : 49
    Points
    49
    Par défaut Merci
    Merci beaucoup,
    C'est bien ce que je cherche à faire.
    Toutefois mes nombres sont dans une table qui fait plusieurs millier de ligne dans une colonne nommée Montant.
    Comment récupérer les données ? (je ne maitrise pas trop les DATA)
    Merci de ta réponse.





    Citation Envoyé par Elodie.B Voir le message
    Bonjour,

    Il existe peut être une autre solution mais voici ce que je propose:
    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
    data a;
    input v1 ;
    cards;
    12340.20
    45.20
    145.20
    ;
    run;
     
    data b;
    set a;
    v2=scan(put(v1,8.2),2,'.');
    v3=input(cats('0.',v2),8.);
    format v1 v3 8.2;
    run;
    Le résultat est la variable numérique v3.

    Bonne journée,

  7. #7
    Membre éprouvé
    Avatar de Stackware
    Homme Profil pro
    ArchiDuc de la Sasserie
    Inscrit en
    Juillet 2013
    Messages
    439
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ArchiDuc de la Sasserie
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2013
    Messages : 439
    Points : 1 017
    Points
    1 017
    Billets dans le blog
    4
    Par défaut
    Sans être expert en code SAS, on peut essayer en proc sql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select montant - trunc(montant) as decimale from matable
    Il faudra ajouter les identifiants bien sûr.

  8. #8
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 60
    Points : 49
    Points
    49
    Par défaut Merci je vais tester cette option.
    Citation Envoyé par Stackware Voir le message
    Sans être expert en code SAS, on peut essayer en proc sql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select montant - trunc(montant) as decimale from matable
    Il faudra ajouter les identifiants bien sûr.

  9. #9
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 60
    Points : 49
    Points
    49
    Par défaut Encore une petite aide stp
    Bonjour stackware,
    Ta solution de colonnes calculées fonctionne très bien (encore merci)
    Pour le fun, j'ai essayé de faire la même chose avec une proc sql qui fonctionne également très bien.
    Cependant, j'ai 3 tables en sortie.
    Y-a-t-il une possibilité de n'en faire qu'une et donc d'enchainer les proc sql ?


    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    proc sql;
    create table CB_OPTION_EPARGNE_BIS AS 
    select 
    DATE_ENCAISSEMENT,
    NUMDSS,
    LIBENC,
    LIBOPRCMP,
    MNTTOTENC as Montant_facture format=CPR_NUM.,
    int(MNTTOTENC) as Montant_Entier format=CPR_NUM.
    from CB_OPTION_EPARGNE
    quit;
     
    proc sql;
    create table CB_OPTION_EPARGNE_BIS2 AS
    SELECT 
    DATE_ENCAISSEMENT,
    NUMDSS,
    LIBENC,
    LIBOPRCMP,
    Montant_facture format=CPR_NUM.,
    Montant_Entier format=CPR_NUM.,
    (Montant_facture - Montant_Entier) as Montant_Centimes format=CPR_NUM.
    from CB_OPTION_EPARGNE_BIS
    group by NUMDSS;
    quit;
    proc sql;
    create table CB_OPTION_EPARGNE_BIS3 AS
    SELECT 
    DATE_ENCAISSEMENT,
    NUMDSS,
    LIBENC,
    LIBOPRCMP,
    Montant_facture format=CPR_NUM.,
    Montant_Entier format=CPR_NUM.,
    Montant_Centimes format=CPR_NUM.,
    abs((-1 - Montant_Centimes)) as Montant_Epargne format=CPR_NUM.
    from CB_OPTION_EPARGNE_BIS2
    group by NUMDSS;
    quit;

  10. #10
    Membre éprouvé
    Avatar de Stackware
    Homme Profil pro
    ArchiDuc de la Sasserie
    Inscrit en
    Juillet 2013
    Messages
    439
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ArchiDuc de la Sasserie
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2013
    Messages : 439
    Points : 1 017
    Points
    1 017
    Billets dans le blog
    4
    Par défaut
    Je pense qu'effectivement tout peut être regroupé en une seule et même requête (i.e. une seule et même table).

  11. #11
    Membre éprouvé
    Avatar de Stackware
    Homme Profil pro
    ArchiDuc de la Sasserie
    Inscrit en
    Juillet 2013
    Messages
    439
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ArchiDuc de la Sasserie
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2013
    Messages : 439
    Points : 1 017
    Points
    1 017
    Billets dans le blog
    4
    Par défaut
    Allez, tu peux essayer ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    proc sql;
    create table CB_OPTION_EPARGNE_BIS AS 
    select 
    DATE_ENCAISSEMENT,
    NUMDSS,
    LIBENC,
    LIBOPRCMP,
    MNTTOTENC as Montant_facture format=CPR_NUM.,
    int(MNTTOTENC) as Montant_Entier format=CPR_NUM.,
    (MNTTOTENC - int(MNTTOTENC)) as Montant_Centimes format=CPR_NUM.,
    abs((-1 - (MNTTOTENC - int(MNTTOTENC)))) as Montant_Epargne format=CPR_NUM.
    from CB_OPTION_EPARGNE
    quit;

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/08/2013, 11h12
  2. Réponses: 1
    Dernier message: 21/04/2008, 16h00
  3. mettre deux chiffres aprés la virgule
    Par anthonycosson dans le forum Langage
    Réponses: 1
    Dernier message: 10/07/2007, 16h04
  4. Deux chiffre apres la virgule
    Par Poisson59 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 10/08/2006, 15h37
  5. Pourcentage avec deux chiffres après la virgule
    Par Oluha dans le forum Langage SQL
    Réponses: 7
    Dernier message: 29/03/2005, 13h47

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