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 :

Compter le nombre de contrats avant et le nombre de contrat ouvert pour chaque client


Sujet :

SAS Base

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2022
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2022
    Messages : 1
    Par défaut Compter le nombre de contrats avant et le nombre de contrat ouvert pour chaque client
    Bonjour,

    Pourriez-vous m'aider sur ce sujet s'il vous plait ?

    En effet, la problématique consiste à remplir 2 colonnes, la 1ère c'est pour compter le nombre de dossier avant chaque contrat et la 2eme colonne c'est pour compter le nombre de contrat ouvert durant chaque contrat et cela pour chaque client.

    J'ai réalisé l'opération en utilisant la commande First et Last en changement le format date en numérique afin d'assurer le tri, mais cela ne semble pas correcte à 100% (car j'ai un problème avec les dates non renseignées).

    Il me semble que cela peut être réalisé avec une boucle en se basant sur les dates de création et de clôture des contrats ou par une proc SQL, mais je n'arrive pas à trouver le bon raisonnement

    Exemple : Pour 3 clients : idir, laurent et paul

    Idir :

    client CREATION_DATE CLOSURE_DATE amount nb_cont_avant nb_cont_ouvert
    idir 05APR2022:16:32:32.628999949 05JUL2022:17:00:02.467000008 299.99 1 1
    idir 04APR2022:19:21:56.956000090 04JUL2022:19:30:02.747999907 171 0 2

    Laurent :

    client CREATION_DATE CLOSURE_DATE amount nb_cont_avant nb_cont_ouvert
    laurent 06APR2022:16:26:49.085999966 06JUL2022:16:30:03.121999979 45.18 3 1
    laurent 06APR2022:20:11:41.582999945 06JUL2022:20:30:02.753000021 140 1 2
    laurent 07APR2022:18:56:03.078000069 07JUL2022:19:00:03.101999998 19.09 0 3
    laurent 06APR2022:17:17:45.084000111 06JUL2022:17:30:03.157999992 61.96 4 4
    laurent 06APR2022:15:27:43.875999928 06JUL2022:15:30:03.236999989 298.79 2 5
    laurent 06APR2022:22:27:29.566999912 06JUL2022:22:30:02.845000029 113.92 7 1
    laurent 06APR2022:17:57:56.187000036 06JUL2022:18:00:03.391999960 50.9 6 2
    laurent 06APR2022:16:34:52.822000027 06JUL2022:17:00:02.829999924 11 5 3

    Paul :

    client CREATION_DATE CLOSURE_DATE amount nb_cont_avant nb_cont_ouvert
    Paul 04JUN2022:07:46:54.303999901 . 54.2 2 1
    Paul 04MAY2022:17:59:33.095000029 04AUG2022:18:00:03.529999971 153.2 0 2
    Paul 03MAY2022:10:59:41.878000021 03AUG2022:11:00:03.448999882 372 1 3
    Paul 29MAY2022:21:22:01.579999924 29AUG2022:21:30:03.081000090 65 1 1
    Paul 29MAY2022:08:19:16.059999943 29AUG2022:08:30:03.226000071 222.71 0 2
    Paul 02JUN2022:22:39:14.381999969 . 49 6 1
    Paul 30MAY2022:21:36:52.592999935 30AUG2022:22:00:02.921000004 59 5 2
    Paul 01JUN2022:18:02:28.953000069 01SEP2022:18:30:03.053999901 173 4 3
    Paul 03JUN2022:14:48:07.697999954 . 85.7 3 4
    Paul 29MAY2022:16:09:00.170000076 29AUG2022:16:30:02.714999914 151.2 2 5

    Voici mon 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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    LIBNAME Test "/home/u43350984/sasuser.v94";
     
     
    /* Fichier source : test.xlsx */
     
    FILENAME nb_ctr '/home/u43350984/sasuser.v94/test.xlsx';
    PROC IMPORT DATAFILE=nb_ctr DBMS=XLSX OUT=WORK.nb_ctr; GETNAMES=YES;
    RUN;
     
    Data Data_format;
    Set nb_ctr (rename=(CREATION_DATE=old1 CLOSURE_DATE=old2));
    CREATION_DATE = input(old1, DATETIME.);
    CLOSURE_DATE  = input(old2, DATETIME.);
    format CREATION_DATE DATETIME. CLOSURE_DATE DATETIME.;
    run;
     
    data Data_manip_date1;
    Set Data_format;
    CRE_DATE = substr(old1,1,9);
    CLO_DATE = substr(old2,1,9);
    CRE_TIME = substr(old1,11,8);
    CLO_TIME = substr(old2,11,8);
    run;
     
    data Data_manip_date2;
    Set Data_manip_date1;
    a = substr(CRE_TIME,1,2);
    b = substr(CRE_TIME,4,2);
    c = substr(CRE_TIME,7,2);
    x = substr(CLO_TIME,1,2);
    y = substr(CLO_TIME,4,2);
    z = substr(CLO_TIME,7,2);
    A2= cats(a,b,c);
    B2 = cats(x,y,z);
    drop a b c x y z CRE_TIME CLO_TIME;
    run;
     
    PROC SQL;
    CREATE TABLE Table_ordonee AS
    SELECT client, old1,old2, amount, A2, B2, nb_cont_avant, nb_cont_ouvert,
    datepart(CREATION_DATE) format=date9. as DatexCRE,
    datepart(CLOSURE_DATE) format=date9. as DAtexCLO
    FROM Data_manip_date2;
    quit;
     
    data Table_ordonee1;
    Set Table_ordonee;
    A1= input(put(DatexCRE,YYMMDDn8.),8.);
    B1= input(put(DAtexCLO,YYMMDDn8.),8.);
    DCR = cats (A1,A2);
    DCL = cats (B1,B2);
    run;
     
    PROC SQL;
    CREATE TABLE table_cerverti AS
    SELECT client, old1 as CREATION_DATE ,old2 as CLOSURE_DATE, DCR, DCL, amount
    FROM Table_ordonee1;
    quit;
     
    Proc sort data=table_cerverti;
    by client DCR;
    run;
     
    /*Impression de la base pour vérifier le tri*/
    proc print data=NB_ctr; run;
     
    /*Compter le nombre de contrat avant la création des nouveaux contrats pour chaque client*/
    data Data_nb_cont_avant ;
    set table_cerverti;
    by client;
    if first.client then nb_cont_avant=0; else nb_cont_avant+1;
    run;
     
    /*Compter le nombre de contrat ouvert pour chaque client*/
    Proc sort data=Data_nb_cont_avant;
    by client descending DCL ;
    run; 
     
    data Data_contrats_final;
    set Data_nb_cont_avant;
    by client;
    if first.client then nb_cont_ouvert=1; else nb_cont_ouvert+1;
    run;
    Je serai très reconnaissant pour votre aide.
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [XL-2019] Compter le nombre de colonnes remplies pour chaque ligne d'un tableau
    Par jneh_ dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 09/06/2022, 22h52
  2. Réponses: 6
    Dernier message: 11/04/2013, 17h17
  3. Compter le nombre d'article différent pour une date X
    Par Raphael1980 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/02/2012, 11h32
  4. Réponses: 3
    Dernier message: 08/04/2009, 13h10
  5. Réponses: 4
    Dernier message: 15/10/2008, 17h26

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