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 :

Fusionner deux tables avec Sql/Hash


Sujet :

SAS Base

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Août 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Août 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Fusionner deux tables avec Sql/Hash
    Bonjour,

    Je m'arrache les cheveux depuis ce matin sur un de mes programmes.

    Deux tables :

    - Table Listing :

    Id Begin End
    1 9h00 9h15
    2 9h01 9h16
    3 10h00 10h15
    ...

    - Table renseignement :

    Time Prix Qty
    9h01 16 10
    9h02 18 21
    9h16 21 55
    9h44 45 67
    10h02 50 100
    10h15 2 77

    La table dont j'ai besoin

    Id Begin End Time Prix Qty Nom
    1 9h00 9h15 9h01 16 10 A
    1 9h00 9h15 9h02 18 21 B
    2 9h01 9h16 9h01 16 10 C
    2 9h01 9h16 9h02 18 21 C
    2 9h01 9h16 9h16 21 55 D
    3 10h00 10h15 10h02 50 100 A
    3 10h00 10h15 10h15 2 77 E


    Jusqu'à présent j'utilisais un programme comme celui-ci :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    proc sql;
        create table work.final as
        select m1.*, m2.time, m2.prix, m2.qty
        from  work.listing  m1, work.renseignement m2
        where m2.time GE m1.begin and m2.time LT m1.end
    ;
    quit;

    Mon problème est le suivant : je travaille en ce moment avec des tables énormissimes, par conséquent les traitements mettent jusqu'à 3 semaines.

    J'aimerais donc utiliser le hash pour gagner du temps mais je n'arrive pas à adapter le programme

    Quelqu'un peut-il m'aider? Merci!!

  2. #2
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Août 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Août 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Une avancée vers la solution
    Re-bonjour,

    J'ai réussi à pondre ce code ci-dessous mais il met plus de temps que la version SQL, je ne pense donc pas qu'il soit optimisé. Si quelqu'un peut venir à mon secours

    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
    data work.final(where=(trade_ref GE begin and trade_ref LT end));
    if _n_=1 then do;
    declare hash h(hashexp:2);
    declare hiter hit('h');
    h.defineKey('id');
    h.defineData('cumun','code', 'membre', 'tc_evt', 'begin', 'end');
    h.defineDone();
    do until (eof);
    set work.prenom end=eof;
    h.add();
    end;
    end;
    set work.nom (drop=code);
    do while(hit.next()=0);
    output;
    end;
    data work.final;set work.final;drop cum;
    run;

  3. #3
    Membre expérimenté
    Homme Profil pro
    Attaché statisticien
    Inscrit en
    Mai 2011
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Attaché statisticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2011
    Messages : 687
    Points : 1 581
    Points
    1 581
    Par défaut
    Bonjour,

    attention à la mémoire avec les tables hash.

    Quelle est la taille de tes différentes tables en nombre de lignes.

    Par ailleurs h(hashexp:2); à voir si le paramètrage est adapté, pour en avoir une idée le paramètre doit être proche de ln(nombre d'item du hash)/ln(2).

    De plus je ne vois pas le rapport entre ton premier code et le second....

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 83
    Points : 137
    Points
    137
    Par défaut
    La notion d'"énormissime" dépend vraiment de la personne

    Comme le dit jerome_pdv2, tu risque de remplir ta mémoire avec un objet hash trop gros.

    Tes tables sont elles bien indexées?

Discussions similaires

  1. Fusionner deux tables avec champs différents
    Par CyberMen dans le forum Débutez
    Réponses: 6
    Dernier message: 22/08/2012, 18h32
  2. SQL Fusionner deux tables
    Par gcvoiron dans le forum Requêtes
    Réponses: 3
    Dernier message: 02/09/2009, 11h13
  3. Réponses: 10
    Dernier message: 11/08/2009, 14h43
  4. [SQL] fusionner deux tables
    Par laloupiote dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 08/04/2008, 11h02

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