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, 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 et se basant sur les dates de création et de clôture des contrats ou par une proc SQL. 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 : 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;
... View more