BookmarkSubscribeRSS Feed
idiryk
Calcite | Level 5

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;

hackathon24-white-horiz.png

The 2025 SAS Hackathon has begun!

It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.

Latest Updates

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 0 replies
  • 494 views
  • 0 likes
  • 1 in conversation