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 :

Détection d'un 3éme crédit sur 184 jours glissants pour le même client


Sujet :

SAS Base

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Détection d'un 3éme crédit sur 184 jours glissants pour le même client
    salut tous sa fait une semaine que j'assaye de faire un calcul sas afin de detecter un 3éme credit de la même personne sur une période de 184 jour et j'arrive pas a le faire et je suis stagiaire : donc je vous explique mon probléme , j'ai me table suivant :

    Client date de credit
    1 04/02/97
    1 04/08/98
    1 05/08/99
    1 04/12/99
    2 04/05/97
    2 04/11/97
    2 04/08/02
    3 04/01/95
    3 04/08/98
    4 04/11/87
    4 04/03/96
    4 04/08/01
    4 05/08/01
    4 04/10/01
    5 04/05/90
    5 04/01/02
    6 04/08/93
    6 04/09/93
    6 04/02/99
    6 04/05/99
    6 04/01/02
    ETC...

    dans le table chaque clients peut avoir plusieurs crédit en mon but donc et de savoir les clients qui vont plusieurs crédit dans une période de 184 jours pour.

    donc j'avais calculer les jours de chaque date par rapport au la date 10/07/78 ( elle correspond à la date du premier crédit pour le 1ere clients de la banque ) .
    ainsi que le cumul de jours pour chaque clients

    et j'ai le résultat suivant :

    Client date de jour cumuldejourpourchacunclients
    credit

    1 04/02/97 6785 6785
    1 04/08/98 7331 14116
    1 05/08/99 7697 21813
    1 04/12/99 7818 29631
    2 04/05/97 6874 6874
    2 04/11/97 7058 13932
    2 04/08/02 8792 22724
    3 04/01/95 6023 6023
    3 04/08/98 7331 13354
    4 04/11/87 3405 3405
    4 04/03/96 6448 9853
    4 04/08/01 8427 18280
    4 05/08/01 8428 26708
    4 04/10/01 8488 35196
    5 04/05/90 4317 4317
    5 04/01/02 8580 12897
    6 04/08/93 5505 5505
    6 04/09/93 5536 11041
    6 04/02/99 7515 18556
    6 04/05/99 7604 26160
    6 04/01/02 8580 34740
    ..ect
    ensuite jarrive pas a bouger dans mon but est le suivant je prend le client 1 et 2 par exemple :
    Client date de jour cumuldejourpourchacunclients
    credit
    1 04/02/97 6785 6785
    1 04/08/98 7331 14116
    1 05/08/99 7697 21813
    1 04/12/99 7818 29631
    2 04/05/97 6874 6874
    2 04/11/97 7058 13932
    2 04/08/02 8792 22724.

    donc le but soit t'utiliser directement la date pour trouver la déférence en jour pour chaque clients par rapport a sa premier date de credit : (donc comme sa )

    Client date de différence
    credit
    1 04/02/97 04/02/97-04/02/97 = 0 jour;
    1 04/08/98 04/08/98-04/02/97 = 180 jour (par hasard)
    1 05/08/99 05/08/99-04/02/97 = 100 jour (par hasard)
    1 04/12/99 04/12/99-04/02/97 = 20j (par hasard)
    2 04/05/97 04/05/97-04/05/97 = 0j
    2 04/11/97 04/11/97-04/05/97 = 60j
    2 04/08/02 04/08/02-04/05/97 = 120 j

    donc on constate que le 1ere clients ne dépasser pas les 184 jour entre le 2éme credit et le 4 éme credit donc le dois le marquer. et aussi pour le client 2 qui dépasse pas 184 jour entre le 1er et le 3éme (toujours je prend les 3 credit qui se suivit ) .

    donc sa c'est le premier cas :

    le 2éme cas c'est utiliser le tableaux que j'ai fait comme suit pour chaque client aussi:

    Client date de jour cumuldejourpourchacunclients
    credit
    1 04/02/97 6785 6785 somme = cumul-jour =0j
    1 04/08/98 7331 14116 somme = jour-(jourdebutclient)
    = 7331 - 6785;

    1 05/08/99 7697 21813 somme = jour-(jourdebutclient)
    = 7697 - 6785;
    1 04/12/99 7818 29631 somme = jour-(jourdebutclient)
    = 7818 - 6785;
    2 04/05/97 6874 6874 somme = cumul-jour =0j

    2 04/11/97 7058 13932 somme = jour-(jourdebutclient)
    = 7058 - 6874;
    2 04/08/02 8792 22724. somme = jour-(jourdebutclient)
    = 8792 - 6874;.

    donc je sais pas es que vous avez compris se que je veux, mais svp aidez moi car je suis bloquer et j'arrive pas a bouger et merci

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2012
    Messages : 40
    Points : 100
    Points
    100
    Par défaut Détection d'un 3éme crédit sur 184 jours glissants pour le même client
    Bonjour,
    Je n'ai pas bien compris vos explications. par contre en me basant sur l'intitulé de votre question j'en ai déduit que vous cherchiez à repérer les clients ayant ouverts 3 crédits et plus sur une période glissante de 184 jours.
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    data a ;
    input id date ddmmyy8. ;
    format date date9. ;
    cards ;
    1 04/02/97
    1 04/08/98
    1 05/08/99
    1 04/12/99
    2 04/05/97
    2 04/11/97
    2 04/08/02
    3 04/01/95
    3 04/08/98
    4 04/11/87
    4 04/03/96
    4 04/08/01
    4 05/08/01
    4 04/10/01
    5 04/05/90
    5 04/01/02
    6 04/08/93
    6 04/09/93
    6 04/02/99
    6 04/05/99
    6 04/01/02 
    ;
    run;
     
    data b;
    set a ;
    by id ;
    if first.id then nb=0 ;
    nb+1;
    format debut date9. ;
    if nb<3 then  debut=.;
    else debut=lag2(date);
    if debut>0 then 
    nbjours=date-debut ;
    run;
    On insère un compteur par identifiant client: nb.
    Pour les 2 premières lignes par client on impose une date début non renseignée.
    la fonction lag2 permet de récupérer la valeur de la date 2 lignes auparavant.
    En comparant la date de la ligne avec celle obtenue par lag2 on a le nbre de jours écoulés pour l'obtention de 3 crédits. Si ce nbre est < 184, on peut identifier les clients concernés.
    J'en retrouve 1 avec vos exemples.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2012
    Messages : 40
    Points : 100
    Points
    100
    Par défaut Détection d'un 3éme crédit sur 184 jours glissants pour le même client
    Précision que j'ai oubliée, il faut que la table initiale soit triée par identifiant - date.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    proc sort data=a ;
    by id date;
    run;

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 133
    Points : 371
    Points
    371
    Par défaut
    Citation Envoyé par p.pfeiffer Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    if nb<3 then  debut=.;
    else debut=lag2(date);
    ...
    c'est une TRES mauvaise idée que d'utiliser la fonction LAG à la suite de ELSE...

    voici votre résultat :
    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
     
    Obs.    id         date        debut
     
      1      1    04FEB1997            .
      2      1    04AUG1998            .
      3      1    05AUG1999            .
      4      1    04DEC1999            .
      5      2    04MAY1997            .
      6      2    04NOV1997            .
      7      2    04AUG2002    05AUG1999
      8      3    04JAN1995            .
      9      3    04AUG1998            .
     10      4    04NOV1987            .
     11      4    04MAR1996            .
     12      4    04AUG2001    04DEC1999
     13      4    05AUG2001    04AUG2002
     14      4    04OCT2001    04AUG2001
     15      5    04MAY1990            .
     16      5    04JAN2002            .
     17      6    04AUG1993            .
     18      6    04SEP1993            .
     19      6    04FEB1999    05AUG2001
     20      6    04MAY1999    04OCT2001
     21      6    04JAN2002    04FEB1999
    voir l'observation n°7 - ID=2 et DEBUT c'est la date de l'observation n°3 (qui elle, nous parle de ID=1...)

    Cordialement

    Sébastien Ringuedé

  5. #5
    Membre actif Avatar de tdiallo
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Mai 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2012
    Messages : 118
    Points : 264
    Points
    264
    Par défaut
    Bonjour,

    J'ai pas bien compris ce que tu veux faire après avoir calculé le nombre de jour!

    Mais jusque la tu peux utiliser ce code

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
     
    DATA a ;
    input id date ddmmyy8. mnt1 mnt2 ;
    format date ddmmyy10. ;
    cards ;
    1 04/02/97 6785 6785
    1 04/08/98 7331 14116
    1 05/08/99 7697 21813
    1 04/12/99 7818 29631
    2 04/05/97 6874 6874
    2 04/11/97 7058 13932
    2 04/08/02 8792 22724
    3 04/01/95 6023 6023
    3 04/08/98 7331 13354
    4 04/11/87 3405 3405
    4 04/03/96 6448 9853
    4 04/08/01 8427 18280
    4 05/08/01 8428 26708
    4 04/10/01 8488 35196
    5 04/05/90 4317 4317
    5 04/01/02 8580 12897
    6 04/08/93 5505 5505
    6 04/09/93 5536 11041
    6 04/02/99 7515 18556
    6 04/05/99 7604 26160
    6 04/01/02 8580 34740
    ;
    run;
    proc sort data=a;
    	by id date;
    run;
     
    data tab;
    	set a;
    	by id date;
    	format dtdebut ddmmyy10.;
    	if first.id then dtdebut=date;
    	if dtdebut=" " then delete;
    	keep id dtdebut;
    run;
     
    proc sql;
    	create table final as
    	select a.*,b.dtdebut, intck('DAY',b.dtdebut,a.date) as nb_jour
    	from a as a left join tab as b
    	on a.id =b.id
    ;
    quit;
    Après si c'est pour compter le nbre de jour de crédit tu peux utiliser l'option count (*) et group by de la proc sql;

    Bon courage !!!

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2012
    Messages : 40
    Points : 100
    Points
    100
    Par défaut
    Merci à Bsébastien pour sa remarque c'était effectivement très maladroit d'utiliser le else.
    Méa culpa.

Discussions similaires

  1. [Oracle] Date(oracle) => Année saisie sur 4 jours, retournée sur 2
    Par romulus dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 21/03/2006, 03h14
  2. Question sur mise à jour automatique
    Par Al soltani dans le forum Access
    Réponses: 2
    Dernier message: 03/03/2006, 11h51
  3. Réponses: 2
    Dernier message: 23/01/2006, 11h55
  4. [VB.Net] Calendar et style sur les jours
    Par Sardonnen dans le forum ASP.NET
    Réponses: 1
    Dernier message: 18/11/2005, 10h23
  5. [Log4j] journalisation sur 15 jours
    Par lapartdombre dans le forum Logging
    Réponses: 10
    Dernier message: 29/09/2005, 13h42

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