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 :

Ne garde pas en mémoire la modification d'une valeur de la ligne précédente


Sujet :

SAS Base

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 54
    Points : 36
    Points
    36
    Par défaut Ne garde pas en mémoire la modification d'une valeur de la ligne précédente
    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.

    /* 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;
    Désolée de la longueur, j'ai du mal à faire cours quand je pars dans des explications

    Merci

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    Je me rends compte en me relisant que ce n'est pas très clair comme question.

    A l'appui, voici un exemple des données :

    Ident DatePrescr DatFinPrescr DateFin_LAG Ecart Duree
    1 2002-03-01 2003-01-14 . . 320
    1 2002-04-01 2003-02-03 2003-01-14 -289 309
    1 2002-05-01 2002-05-31 2003-02-03 -279 31
    1 2002-06-01 2002-06-30 2002-05-31 0 30
    1 2002-07-01 2002-07-31 2002-06-30 0 31
    1 2002-08-01 2002-08-31 2002-07-31 0 31
    2 2000-06-26 2000-07-25 . . 30
    2 2000-08-01 2000-08-30 2000-07-25 6 30
    2 2000-08-28 2000-09-26 2000-08-30 -3 30
    2 2000-10-02 2000-10-31 2000-09-26 5 30
    Et voilà ce que je voudrais obtenir :

    Ident DatePrescr2 DatFinPrescr2 DateFin_LAG2 Ecart2 Duree
    1 2002-03-01 2003-01-14 . . 320
    1 2003-01-15 2003-11-19 2003-01-14 0 309
    1 2003-11-20 2003-12-20 2003-11-19 0 31
    1 2003-12-21 2004-01-19 2003-12-20 0 30
    1 2004-01-20 2004-02-19 2004-01-19 0 31
    1 2004-02-20 2004-03-21 2004-02-19 0 31
    2 2000-06-26 2000-07-25 . . 30
    2 2000-08-01 2000-08-30 2000-07-25 6 30
    2 2000-08-31 2000-09-29 2000-08-30 0 30
    2 2000-10-02 2000-10-31 2000-09-29 2 30
    Cependant, dès la ligne 3, il y a des pbs dans les dates, car les modifications effectuées la ligne précédentes ne sont pas retenues.
    Qqun a-t'il déjà rencontré ce problème ?
    Peut-être est-ce lié à la fonction LAG ?
    QQun a-t'il déjà eu des soucis avec cette fonction ?

    Merci

Discussions similaires

  1. Réponses: 7
    Dernier message: 27/04/2007, 10h01
  2. Base de registre : Blocage modification d'une valeur
    Par damsmut dans le forum Windows XP
    Réponses: 6
    Dernier message: 26/09/2006, 02h25
  3. [SQL] (PHP/SQL) Erreur de modification d'une valeur
    Par ymoreau dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 15/09/2006, 14h55
  4. Réponses: 9
    Dernier message: 20/06/2006, 18h47
  5. [VB.NET] [XML] Modification d'une valeur
    Par kirk80 dans le forum Windows Forms
    Réponses: 9
    Dernier message: 09/09/2004, 16h15

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