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 :

Transformer des dates SAS en chaines


Sujet :

SAS Base

  1. #1
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 605
    Points
    4 605
    Par défaut Transformer des dates SAS en chaines
    Bonjour,

    J'ai une table client avec une colonne id et 3 colonnes dates au formats SAS + d'autres colonnes dont nous n'utiliserons pas ici.

    Je souhaite récupérer l'id client + les 3 colonnes dans une tables. Dans une seconde table je transforme les dates SAS en chaine de caractères.

    Au final je transforme le mois aqui est au format SAS (fameux trigramme du mois en anglais) , en numéros du mois (01 , 02 ... ).

    Voici ce que j'ai déjà tapé :

    Code sas : 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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    /* transferer les données de la table traitement_date_2 dans traitement_date , / ! \ attention dans traitement_date_2 les dates sont au format anglais " DDMMMYYY " (exemple 10SEP2014) , dans traitement_date les dates sont aux formats texte pour un traitement de chaine */
     
    PROC SQL ; 
     
    CREATE TABLE table traitement_date
     
    (
        code_cli char(10),
        date_1 char(10),
        date_2 char(10),
        date_3 char(10)
    )
    ;
     
    run;
     
    proc sql ;
     
    CREATE TABLE traitement_date_2 as 
     
    SELECT code, d1 , d2 , d3
    FROM client ;
     
    run ;
     
    proc sql ;
     
    /* ici on cherche a transférer le contenu de la table traitement_date_2 dans traitement_date */
     
    INSERT INTO traitement_date (code_cli, date_1 , date_2 , date_3)
    VALUES (code, d1 , d2 , d3)
    FROM  traitement_date_2;
     
    /* ici la fonction ne marche pas ??? */
     
    run;
     
    proc sql;
     
     
    PROC SQL ;
     
    /* ici on cherche à remplacer le trigramme du mois qui est en lettre et en anglais par le numeros du mois correspondant */
     
    /* ici encore le when n'est pas reconnu pourtant la fonction sql vient d'un site officile SAS avec une proc sql */
     
    UPDATE traitement_date_2
    SET 'date_1' = CASE (
     
    WHEN date_1 LIKE '%JAN%' THEN '01'
    WHEN date_1 LIKE '%FEB%' THEN '02'
    WHEN date_1 LIKE '%MAR%' THEN '03'
    WHEN date_1 LIKE '%APR%' THEN '04'
    WHEN date_1 LIKE '%MAY%' THEN '05'
    WHEN date_1 LIKE '%JUN%' THEN '06'
    WHEN date_1 LIKE '%JUL%' THEN '07'
    WHEN date_1 LIKE '%AUG%' THEN '08'
    WHEN date_1 LIKE '%SEP%' THEN '09'
    WHEN date_1 LIKE '%OCT%' THEN '10'
    WHEN date_1 LIKE '%NOV%' THEN '11'
    WHEN date_1 LIKE '%DEC%' THEN '12'
    )
    end;
     
    run;

    Merci d'éclairer ma lanterne

  2. #2
    Membre éprouvé
    Homme Profil pro
    Statisticien/développeur BI
    Inscrit en
    Janvier 2012
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Statisticien/développeur BI
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2012
    Messages : 326
    Points : 1 142
    Points
    1 142
    Par défaut
    Bonjour,

    On va faire plus simple ...
    Les dates SAS correspondent en fait à un nombre de jours depuis le 01/01/1960 (qui correspond à 0)
    Une variable date est donc toujours numérique, le reste n'est qu'une question de format d'affichage :
    • valeur du 01 janvier 2014 = 19724
    • 01JAN2014 = format date9. (par défaut)
    • 01/01/2014 = format DDMMYY8.


    A partir de la, on peut utiliser la fonction PUT pour convertir ta variable numérique en variable caractère :

    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
    /* création de la table test */
    DATA CLIENT;
    INPUT code :$8. d1 :8. d2 :8. d3 8.;
    format d1 d2 d3 date9.;
    cards;
    toto 19432 19879 19936
    tata 16730 17567 19490
    titi 5699 13142 14277
    tutu 9769 11783 17744
    ;
    run;
     
    /* conversion des variables en caractères */
    DATA traitement_date_2 (KEEP=code date1 date2 date3);
    SET CLIENT;
    date1 = PUT(d1,DDMMYY8.);
    date2 = PUT(d2,DDMMYY8.);
    date3 = PUT(d3,DDMMYY8.);
    RUN;

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

Discussions similaires

  1. Transformer des dates en expression 'Du . au'
    Par Djeros dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 02/04/2014, 14h47
  2. Réponses: 0
    Dernier message: 22/04/2010, 10h02
  3. [Transformer Powerplay] Comparer des dates
    Par mmguad dans le forum Cognos
    Réponses: 1
    Dernier message: 26/02/2008, 17h10
  4. transformer des objets Date et Integer
    Par Edta dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 25/12/2007, 16h25
  5. Fonctions de manipulation des chaines et des dates
    Par Fares BELHAOUAS dans le forum Débuter
    Réponses: 3
    Dernier message: 09/11/2002, 22h43

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