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 :

Recherche d'individus dans une base de données


Sujet :

Débutez

  1. #1
    Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Octobre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Recherche d'individus dans une base de données
    Bonjour

    J'ai une petite question (j'ai pas trouvé de réponse sur le forum même si je suis sur qu'elle existe):.
    dans une table contenant 3 colonnes( NOM, période et montant), j'aimerai extraire les NOMS des personnes dont le montant du mois en cours est >50.000 et pour qui le montant n'a jamais dépassé 5.000€ durant les 18 derniers mois .
    exemple: La personne qui je cherche a ce profil: Elle a en Septembre 2012 un montant de 120.000€ et 18mois auparavant soit jusque MARS 2011 , le montant n' a pas dépassé 5000€.
    la table se présente ainsi:
    NOM Période Montant
    A 201209 100000
    B 201208 4000
    C 201103 3000
    D 201104 120000
    E 201105 17000

    je vous remercie d'avance pour vos réponses

  2. #2
    Rédacteur

    Homme Profil pro
    SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Inscrit en
    Avril 2009
    Messages
    2 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 2 497
    Points : 6 064
    Points
    6 064
    Par défaut
    tu crées une table contenant la sous-population de ceux ayant plus de 5000 au cours des 18 mois puis une table dont le montant au mois m est sup. à 50000.

    tu merges tes deux tables.

  3. #3
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    235
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 235
    Points : 372
    Points
    372
    Par défaut puissance sql
    Salut,
    il y a plusieurs façons de faire mais le recours à la proc sql avec une sous-requete dépendant de la requete mère est une des plus "élégantes".
    Un exemple avec controle sur 3 mois :

    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
     
    data test;
    input NOM $1. +1 Periode yymmn6. +1 Montant ;
    format Periode yymmn6.;
    cards;
    A 201206 3000
    A 201207 5000
    A 201208 2000
    A 201209 100000
    B 201207 1000
    B 201208 500
    B 201209 50001
    ;
    run;
    proc print; run;
     
     
    proc sql;
    select *,
     
    CASE when Montant>=50000 
    	and (
    		select MAX(b.Montant) from test b where a.NOM=b.NOM and 1<=intck('month', b.Periode, a.Periode)<3
    		 ) >= 5000 
    		then 1
    		else 0 
    END as selection
     
    from test a
    ;
    quit;

  4. #4
    Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Octobre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Bonjour SASDAM,
    Merci bqs pour votre réponse, ya qqs passages que je n'ai pas bien compris( suis relativement novice en sas).
    voici les données dont je dispose, le set contient entre 2 et 4 million d'enregistrements:
    pourriez-vous vous basez sur ça pour que je puisse mieux comprendre.
    je vous remercie d'avance
    PERIOD VRNMS1 PREFMS2 VRNMS2 Calculation
    201101M 0069871364 AAA 123456987 35,76
    201101M 0069871364 AAA 123456988 213,23
    201102M 0069871364 AAA 123457942 267,27
    201102M 0069871364 AAA 123457943 449,71
    201102M 0069871364 AAA 123457944 1018,98
    201103M 0069871364 AAA 123459212 2681,76
    201103M 0069871364 BBB 123459213 732,3
    201103M 0069871364 BBB 123459214 493,18
    201104M 0069871364 BBB 123459966 27,95
    201104M 0069871364 BBB 123459967 220,46
    201104M 0069871364 BBB 123459968 69,16
    201104M 0069871364 BBB 123459969 309,31
    201104M 0069871364 BBB 123459970 759,5
    201104M 0069871364 BBB 123459971 365,11
    201104M 0069871364 BBB 123459995 84,65
    201104M 0069871364 BBB 123459996 0,02
    201105M 0069871364 BBB 123460902 149,37
    201105M 0069871364 BBB 123460903 171537
    201105M 0069871364 BBB 123460904 285,37
    201106M 0069871364 BBB 123461788 418,84
    201106M 0069871364 BBB 123461789 81292,96
    201106M 0069871364 BBB 123461790 1810
    201106M 0069871364 BBB 123461791 1953,07
    201106M 0069871364 BBB 123461819 362,26
    201107M 0069871364 BBB 123462660 120
    201107M 0069871364 BBB 123462661 102,88
    201107M 0069871364 BBB 123462662 4650,39

  5. #5
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    235
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 235
    Points : 372
    Points
    372
    Par défaut précision
    Il va falloir m'expliquer à quoi correspondent les champs.

    La requete que j'ai écrite est très simple dans le sens où elle reproduit ce que ferait l'oeil (et le cerveau) pour répondre au probleme.

    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
     
    select a.NOM
             , a.Periode
    ,        , a.Montant
    /* quand le montant >=50 000 */
    CASE WHEN a.Montant>=50000 
    	       and (
                               /* on regarde le maximum du montant */
    		select MAX(b.Montant) from test b 
                                where
                                 /* pour le meme NOM */
                                 a.NOM=b.NOM 
                                 and 
                                 /* et sur les 2 mois qui precedent */
                                  1<=intck('month', b.Periode, a.Periode)<3
    		 ) >= 5000 /* si ce max > 5000 alors selection=1 */
    		THEN 1
              ELSE 0  /* autement selection vaut 0 */
    END as selection
    La sous requete B dépend de la requete mère A du fait que pour un couple a.NOM, a.PERIODE donné, elle ne va porter que sur les données b.NOM = a.NOM de moins de 2 mois.

    Si tu veux filtrer les données, tu transformes le CASE en clause WHERE:

    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
     
     
    proc sql;
    create table resultat_selection
    as select a.NOM
             , a.Periode
            , a.Montant
    from test a
     
    where a.Montant>=50000 
    	and (
    		select MAX(b.Montant) from test b where a.NOM=b.NOM and 1<=intck('month', b.Periode, a.Periode)<3
    		 ) >= 5000 
     
    ;
    quit;
    EDIT: ici le contrôle se fait pour tous les mois.
    Si seul le dernier mois t'interesse (septembre 2012) complete la clause where comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    where a.Periode=input('201209', yymmn6.) and a.Montant>=50000 
    	and (
    		select MAX(b.Montant) from test b where a.NOM=b.NOM and 1<=intck('month', b.Periode, a.Periode)<3
    		 ) >= 5000
    Evidemment, la requete est a adapter a tes données. Pour pouvoir utiliser intck j'ai créé une table source avec des mois au format date SAS.

  6. #6
    Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Octobre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Rebonjour SASADM,
    PERIOD : periode d'achat de biens:M: mensuel Q: trimestriel
    NR vendeur: Numéro du vendeur
    Prfix^Pays: prefix du pays : par exempelk FR: France
    Num Acheteur :Numéro de l'acheteur
    Total: Somme

    PERIOD NR vendeur Prefix_Pays Num Acheteur Total
    201202M 987765463 LU 19876453 567.17
    201101M 987765463 fr 125688 114.7
    201102M 987765463 fr 48963214 267.83
    201103M 987765463 fr 85239 139.03
    201209M 987765463 fr 19876453 124.94
    201202Q 987765463 fr 41598 70.38
    201202M 987765463 fr 19876453 287.96
    201202M 987765463 fr 19876453 300.47
    201202M 987765463 fr 19876453 171.66
    201202M 987765463 fr 49637 434.9
    201203M 987765463 de 19876453 102.53
    201204M 987765463 de 19876453 522.92
    201205M 987765463 de 19876453 395.19
    201206M 987765463 de 158963 215.35
    201207M 987765463 de 19876453 208.29
    201208M 987765463 de 19876453 98.89
    201209M 987765463 de 4568 145171.85
    201110M 987765463 de 7856 4528.22
    201111M 987765463 de 19876453 161.78
    201112M 987765463 at 4523 405.37
    201103Q 987765463 at 19876453 242.15
    201202M 987765463 at 19876453 323.98
    201202M 987765463 at 4596 821.05
    201202M 987765463 at 19876453 117.92
    201202M 987765463 at 19876453 252.72
    201202M 987765463 at 19876453 120.85
    201106Q 987765463 at 1528967 -999.15
    201202M 987765463 at 1528978567 256.33
    201202M 987765463 at 454477 150.39
    201202M 987765463 at 456389 38.17
    201202M 987765463 at 4589 133.54

    Rappel: je cherche le vendeur qui a vendu en en 201209M(mois en cours)pour par ex 50.000 mais qui les 18mois précédents n' a pas vendu pour plus de 5000€.
    Merci d'avance à vous tous

  7. #7
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    235
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 235
    Points : 372
    Points
    372
    Par défaut
    Je pense t'avoir donné assez de billes. Comme ta requete ne porte que sur le dernier mois, la solution de datametric est valide. Je me suis embarqué dans cette solution car j'avais compris que tous les mois où la situation se produit t'intéressaient. Toujours est-il que qui peut le plus peut le moins et c'est le cas de ma solution. Relis mon précédent post et adapte en conséquence. Si tu as des soucis pour convertir les mois en dates, tu trouveras ce qu'il te faut sur ce forum.
    De façon général, on gère les dates en SAS en utilisant précisement les dates SAS qui permettent l'utilisation de tout un tas de fonctions.

  8. #8
    Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Octobre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Un grand merci SASADM,

    tu m'as donné bqs d'éléments intéressants. je vais maintenant tester tout àa.

    encore une fois un grand merci

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/09/2010, 03h58
  2. Rechercher des informations dans une base de donnée en excel
    Par simonasjdp dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/07/2009, 19h10
  3. recherche de mots dans une base de données
    Par arakna dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 08/04/2009, 15h27
  4. recherche en VBA dans une base de donnée excel
    Par INCO13 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 24/06/2008, 13h58
  5. recherche dans une base de donnée+boucle
    Par eric205 dans le forum Bases de données
    Réponses: 8
    Dernier message: 15/03/2005, 21h14

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