Bonjour à tous,

J'ai pour base deux tables: une qui contient une liste d'agent "selection_agent", sous la forme 1 ligne = 1 nom d'agent. Ma deuxième table "nb_agent" contient trois colonnes: date, créneau horaire (par demi-heure) et nombre d'agents nécessaires.
Je souhaiterai maintenant obtenir une table qui sélectionne le nombre d'agents nécessaires sur chaque créneau de chaque jour et qui pioche ce nombre dans la première table, afin d'obtenir le nom des agents affectés sur chaque créneau (dans le but de réaliser un planning). La table finale souhaitée est "triage_agent". J'aurais plus tard des contraintes à implémenter, il faudrait donc de la souplesse dans le code...

Actuellement j'en suis rendu là:

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

%let datedebut = "30mar2016"d;
%let datefin = "31mar2016"d;
%let heureouv = "09:00:00"t;
%let heurefer = "16:00:00"t;
%Macro planning;
/*Je stocke les nombres d'agents nécessaires par créneau dans une MV, exemple: "A20535_9h00"*/
data _Null_;
	set nb_agent;
	call symput (compress("A"||dtjour||"_"||creneau),nb_agent);
run;

/*Je modifie les dates afin de pouvoir boucler dessus*/
data _Null_;
	date1 = &datedebut.;
	call symput ("date1",date1);
	date2 = &datefin.;
	call symput ("date2",date2);
run;

/*vidage de la table avant de commencer à y incrire les agents*/
data dossier.triage_agents;
	set dossier.triage_agents;
	where agent = 'a';
run;

/*On boucle sur les jours*/
data _NULL_;
%do i=&date1. %to &date2. %by 1;
/*Je modifie également les heures pour boucler dessus*/
data _Null_;
	time1 = &heureouv.;
	call symput ("time1",time1);
	time2 = &heurefer.;
	call symput ("time2",time2-1800);
run;
/*On boucle sur les créneaux par demi-heure*/
%do j=&time1. %to &time2. %by 1800;

data dossier.triage_agents;
		set dossier.triage_agents selection_agent (firstobs=1 obs=&&A&i._&ti2.); /*Je sélectionne le nombre de lignes correspondant au nombre d'agents nécessaires que l'on a stocké en MV*/
date=&i.;
creneau=&j.;
run;
end;
end;
run;
%mend;
%planning

J'obtiens donc une table qui contient le bon nombre de lignes pour chaque créneau, mais je n'arrive pas à récupérer la date du jour et le créneau horaire sur lequel j'ai pioché mes x agents.
La date et le créneau sont les mêmes pour chaque ligne: la date de fin et le créneau de fin (31 mars et 16h).

Auriez vous une solution pour obtenir, par exemple s'il me faut 20agents le 30 mars à 9h: 20lignes avec: nom/20534/32400 ou nom/30-mar-2016/09:00:00 (je m'occuperai des formats).

Merci d'avance!