Bonjour,
Ca fait trois jours que je coince sur un programme, je ne comprends pas pourquoi ca ne fonctionne pas !!!
Le sujet concerne des traitements (prescriptions) pour une maladie.
Voilà mon problème : Il arrive que des personnes n’aient pas terminé leur prescription lorsqu’ils viennent chercher leur prescription suivante (= Chevauchement de traitement).
J’ai une ligne par prescription, si un patient vient chercher le 10 février sa 2ème prescription, mais que sa 1ère prescription se terminait le 13 février, il faut que je décale le début de sa 2ème prescription au 14 février, et que je recalcule la date de fin de sa 2ème prescription ( = DatePrescr + duree, il y a une variable durée de traitement qui peut être égale à 30 jours, 7 jours, 180 jours…).
J’ai créé une variable Ecart = Date de début d'une precription (DatePrescr) – date de fin de la prescription précédente (DateFinPrescr).
Si l’écart est négatif, c’est qu’il y a chevauchement.
Pour résumer, si un patient a eu 10 traitements, il y a 10 lignes pour ce patient.
Je regarde ligne par ligne s’il y a chevauchement de traitement, si oui, la date de prescription va être modifiée, et si la date de prescription est modifiée, il faut alors recalculer la fin de prescription, ainsi que l’écart avec le début de la prescription suivante).
Le programme ci-dessous a un pb à partir du moment où la date de prescription a été modifiée, cette nouvelle date de prescription n’est pas prise en compte à la ligne d’après.
Désolée de la longueur, j'ai du mal à faire cours quand je pars dans des explications/* DatePrescr = date de prescription du traitement */
/* DatePrescr2 = Nouvelle date de prescription du traitement */
/* DatFinPrescr = Date de fin du traitement */
/* DatFinPrescr2 = Nouvelle Date de fin du traitement */
/* DateFin_LAG = Date de fin du traitement précédent = LAG(DatFinPrescr) */
/* DateFin_LAG2 = Nouvelle Date de fin du traitement précédent */
/* Durée = durée du traitement */
/* Ecart = Ecart de temps en jours entre 2 prescriptions (= 2 traitements), c’est-à-dire entre le début d’une prescription (DatePrescr) et la fin de la prescription précédente (= DateFin_LAG) (= la fin du traitement précédent)*/
Proc sort data=verif2 ;
By ident DatePrescr;
Run ;
data essai;
set t;
by ident DatePrescr;
sujet=lag(ident);
format DatFinPrescr2 DDMMYY10.;
format DateFin_LAG2 DDMMYY10.;
format DatePrescr2 DDMMYY10.;
DateFin_LAG2=DateFin_LAG;
DatePrescr2=DatePrescr;
DatFinPrescr2=datfinprescr;
Ecart2=Ecart;
DateFin_LAG2 = Lag(DatFinPrescr2); /********** PROBLEME **********/
if DateFin_LAG=. then DateFin_LAG2=.;
if DateFin_LAG2 ne . then Ecart2=DatePrescr2-(DateFin_LAG2 + 1);
if ident=sujet and (Ecart2 < 0) and Ecart2 ne . then do;
DatePrescr2=DateFin_LAG2 + 1;
DatFinPrescr2=DatePrescr2 + duree - 1;
Ecart2=DatePrescr2-(DateFin_LAG2 + 1);
end;
run;
Merci
Partager