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

Débutez Discussion :

Addition sur deux datasets


Sujet :

Débutez

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 27
    Points : 20
    Points
    20
    Par défaut Addition sur deux datasets
    Hello,

    J'ai 2 tables avec juste 2 variables dont l'une type numérique et l'autre de type caractère. Appelons les D1 et D2. Je cherche désespérément à faire mettre à jour ma table D1 avec les valeurs de ma table D2, c'est à dire que j'aimerais ajouter à ma variable numérique D1, la valeur numérique (somme) de ma table D2, et ce pour les variables de type caractère correspondante.

    J'ai du mal à m'expliquer mais j'espère que vous comprendrez.

  2. #2
    Membre confirmé
    Homme Profil pro
    Consultant Finance/Assurance
    Inscrit en
    Décembre 2013
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant Finance/Assurance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 198
    Points : 638
    Points
    638
    Par défaut
    Bonjour,

    Je tente ma chance sur la compréhension du problème et sa résolution, n'hésite à dire si ce n'est pas du tout ce que tu cherches à faire :
    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
     
    data D1;
    input ID $ var1;
    cards;
    1 10
    2 30
    3 20
    4 30
    4 50
    5 6
    ;
     
    data D2;
    input ID $ var2;
    cards;
    1 20
    2 30
    4 50
    5 60
    6 20
    ;
    run;
     
    data new_d1;
    merge D1(in=a) D2;
    by id;
    if a;
    var3 = coalesce(var1 + var2,var1);
    run;
    La variable var3 est la somme de Var1 et var2 en fonction de l'ID correspondant

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    Bonjour,

    C'est plus ou moins ce à quoi je souhaite arriver.
    En reprenant votre exemple, j'aimerais simplement faire la somme pour un unique ID et non pour l'ensemble. Et si possible, que cela soit directement impacté sur la variable n°1 sans pour autant en créer une 3ème.

    S'il n'y a pas moyen alors j'imagine qu'il est toujours possible de remplacer var1 par var3 et supprimer var3 ? Je vais essayer de mon côté voir si je me débrouilles avec ce début de solution.


    Merci !

  4. #4
    Membre confirmé
    Homme Profil pro
    Consultant Finance/Assurance
    Inscrit en
    Décembre 2013
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant Finance/Assurance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 198
    Points : 638
    Points
    638
    Par défaut
    J'ai ajouté la variable var3 uniquement pour que l'on puisse voir ce qui est fait par le programme, si on veut garder et modifier VAR1 il n'y a pas de problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    data new_d1 (drop=var2);
    merge D1(in=a) D2;
    by id;
    if a;
    var1 = coalesce(var1 + var2,var1);
    run;
    faire la somme pour un unique ID et non pour l'ensemble
    En revanche je n'ai pas bien bien compris ce qu tu souhaites faire avec la somme (on va mettre ça sur le fait que c'est le matin ^^)

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    Merci pour le temps que tu prends en tout cas.

    Premièrement et pour faciliter un peu la chose, mes var1 et var2 sont identiques. Ce sont les mêmes variables.
    J'aimerais donc faire une mise à jour de ma table 1 en ajoutant les valeurs de ma table 2 mais UNIQUEMENT pour un identifiant.

    Ainsi, ma table 1 reste la même, mais est juste modifiée au niveau de la ligne avec l'identifiant 2 par exemple qui est mise à jour avec la table 2.

  6. #6
    Membre confirmé
    Homme Profil pro
    Consultant Finance/Assurance
    Inscrit en
    Décembre 2013
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant Finance/Assurance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 198
    Points : 638
    Points
    638
    Par défaut
    Le programme que j'ai donné fait la somme de var1 dans ta table D1 avec la variable var2 dans ta table D2 et ceci par identifiant. C'est à dire que la somme ne sera faite que si l'ID de la table D1 est égal à l'ID de la table D2. La table D1 reste la même j'ai juste ajouté les valeur qui sont présentent dans D2.

    Peut être qu'un autre membre du forum aura compris mieux que moi ton problème et te proposera une solution adaptée !

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    Le programme fait en soi ce qu'il faut. Je n'aurais juste eu besoin que de la mise à jour, non pas de tous les identifiants (1, 2, 3, 4, 5, 6), mais simplement d'un seul (2 par exemple) et donc sans toucher aux autres (1, 3, 4, 5, 6).

    Merci quand même pour ce code !

  8. #8
    Membre confirmé
    Homme Profil pro
    Consultant Finance/Assurance
    Inscrit en
    Décembre 2013
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant Finance/Assurance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 198
    Points : 638
    Points
    638
    Par défaut
    Si je reprends ton exemple et que tu souhaites uniquement modifier la variable var1 quand ID = 2 alors tu peux utiliser une clause where :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    data new_d1 (drop=var2);
    merge D1(in=a) D2(where=(id='2'));
    by id;
    if a;
    var1 = coalesce(var1 + var2,var1);
    run;
    Ici la variable var1 va être update uniquement quand id = '2' sinon elle gardera la valeur initiale

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    C'est exactement ça !

    J'ajouterais une petite subtilité, comme procéder à partir du moment où je n'ai pas "var1" et "var2" mais deux fois "var1".

    Dois - je ajouter un AS, un FROM ?

  10. #10
    Membre confirmé
    Homme Profil pro
    Consultant Finance/Assurance
    Inscrit en
    Décembre 2013
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant Finance/Assurance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 198
    Points : 638
    Points
    638
    Par défaut
    On y arrive finalement ^^

    Si tu as le même nom de variable dans les 2 tables tu peux utiliser un rename :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    data new_d1 (drop=var2);
    merge D1(in=a) D2(rename=(var1=var2) where=(id='2'));
    by id;
    if a;
    var1 = coalesce(var1 + var2,var1);
    run;
    Cela devrait marcher !

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    Parfait, merci beaucoup :-)

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 24/06/2013, 13h03
  2. [SSRS] [2K5] Filtre sur deux dataset
    Par Ledobs dans le forum SSRS
    Réponses: 1
    Dernier message: 22/02/2010, 11h07
  3. Réponses: 0
    Dernier message: 03/12/2008, 12h06
  4. 2 Count() sur deux tables en jointures gauches
    Par Alexandre T dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/09/2003, 16h53
  5. Pb : malloc qui marche une fois sur deux .... ?
    Par guillaume_pfr dans le forum C
    Réponses: 14
    Dernier message: 21/07/2003, 09h52

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