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 :

problème parcours d'une table sql


Sujet :

SAS Base

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut problème parcours d'une table sql
    Bonjour, je suis tout novice dans le sas/sql, je commence à peine et j'ai déjà besoin d'un petit coup de pouce!
    Voila j'ai un tableau de donnée, correspondant a des achats (fictifs) de clients etc...
    Je vous montre a quoi ca ressemble en gros, ca ira plus vite que d'en faire une présentation écrite:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    id    |  montant   |     date         |   identifiant_client
    ___________________________________________________
    1  |      45       |   2008/02/03  |     850
    2  |      46       |   2008/02/04  |     851
    3  |      48.1    |   2008/03/03  |     853
    4  |      41       |   2008/04/18  |     854
    5  |      50       |   2008/04/20  |     857
    6  |      80.7    |   2008/02/03  |     858
    6  |      75       |   2008/02/04  |     858
    6  |      20       |   2008/02/08|     858
    6  |      15       |   2008/02/12|     858
    7  |      45.2    |   2008/02/08  |     860
    8  |      87.8    |   2008/02/10  |     868
    etc....

    j'essaye de recréer un tableau avec une seule instance de chaque client, pour ça je parcours la table et si un même client a fait plusieurs achats je fais la somme des montants.
    Ca fait quelque chose comme ça:

    proc sql;
    select id, sum(montant) as total_achat, count(id) as nbrTrans, identifiant_client
    from matablesql
    quit;

    (je suis désolé je n'ai plus le code parfaitement en tête, je ne suis pas chez moi) En tout cas, ma fonction (correctement écrite) fonctionne trés bien.
    Et j'obtiens une table comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    id    |   total_achat |   nbrTrans  |   identifiant_client
    ____________________________________________________
    1  |      45            |     1           |     850
    2  |      46            |     1           |     851
    3  |      48.1         |     1           |     853
    4  |      41            |    1            |     854
    5  |      50            |    1            |     857
    6  |      190.7        |    4            |     858
    7  |      45.2          |   1            |     860
    8  |      87.8         |    1            |     868
    Jusque la tout va bien, mon problème est le suivant:
    je souhaiterais rajouter une colonne avec l'interval de temps en jours qu'il peut y avoir entre plusieurs achat d'un même client s'il y en a eu.
    Par exemple avec le cas du tableau ci dessus, je voudrais une colonne supplémentaire nomé par exemple "interval", dans laquelle il y aurait le nombre de jours séparant le premier achat du dernier.
    Dans cet exemple le seul client qui ait réalisé plusieurs achats c'est le numéro 6. Donc dans sa colonne interval je voudrais avoir 9, car il s'est ecoulé 9jours entre son premier achat et son derniers achat.
    Et pour les autres on aurait 0.

    Je ne sais pas comment faire cela, le parcours se fait sur chaque ligne de la table de depart, mais par exemple la somme des montants se fait automatiquement. Pour les dates il me faudrait sauver la premiere, puis continuer le parcours, sauver la derniere, et effectuer la soustraction des dates. Mais Je ne sais pas comment faire.
    Quelqu'un a t'il une idée?

  2. #2
    Membre émérite

    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
    Points : 2 329
    Points
    2 329
    Par défaut
    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
     
    data t;
    format d1 date9.;
    i=1;d1='13APR08'd; output;
    i=1;d1='16APR08'd;output;
    i=4;d1='16OCT08'd;output;
    i=2;d1='13APR08'd;output;
    i=3;d1='16APR08'd;output;
    i=3;d1='16OCT08'd;output;
    run;
    proc sql;
    create table temp as
    select i, max(d1) as max_d format=date9.,min(d1) as max_d  format=date9.,INTCK('day',min(d1),max(d1)) as dif
    from t
    group by i;
    quit;
    Je crois que ce code répond à ton problème

  3. #3
    Candidat au Club
    Inscrit en
    Juin 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    ca correspond tout à fait!
    je vais pouvoir me debrouillé avec ça, c'est exactement ce que je cherchais,
    merci beaucoup!

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

Discussions similaires

  1. problème d'ouverture d'une table sql server 2005
    Par WX500 dans le forum Administration
    Réponses: 2
    Dernier message: 03/05/2011, 16h36
  2. Problème pour mettre à jour une table SQL
    Par Bes74 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 27/03/2009, 20h21
  3. Problème taille d'une table sql server 2005
    Par oadin dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 18/02/2008, 09h12
  4. Problème d'update d'une table sql en vb6
    Par cfelicien dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 30/08/2007, 20h24
  5. Probléme de parcour d'une table
    Par rootdaoud dans le forum Langage
    Réponses: 3
    Dernier message: 25/12/2006, 13h24

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