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 :

Compter un nombre d'actions sur une durée


Sujet :

SAS Base

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Dataminer
    Inscrit en
    Mai 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dataminer

    Informations forums :
    Inscription : Mai 2013
    Messages : 14
    Par défaut Compter un nombre d'actions sur une durée
    Bonjour,

    Je recherche un peu d'aide pour ceci :

    J'ai une liste de réservations avec leur date et l'id du client.
    J'aimerai obtenir pour chaque réservation, le nombre de futures réservations dans les 90 jours pour le client en question ...

    Une idée ??

    Merci !

    Laurent

  2. #2
    Membre du Club
    Homme Profil pro
    Data Manager
    Inscrit en
    Octobre 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Data Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Octobre 2013
    Messages : 10
    Par défaut
    Bonjour,
    Je ne connais pas exactement la sortie que tu voudrais obtenir, mais pour récupérer uniquement le nombre de réservations à venir dans les 90 jours par ID, je ferais le programme suivant, une étape data supprimant les réservations supérieures à 90 jours, et une seconde étape data pour compter le nombre de réservations par ID. Sinon, je pensais aussi à une proc transpose si tu désires conserver sur une même ligne l'ensemble des réservations pour un ID donné.
    J'espère que j'aurai pu t'aider un peu avec le programme ci-dessous.

    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
    Data table1;
    input ID $ DATE_RES ddmmyy10.;
    format DATE_RES date10.;
    cards;
    A001 05/11/2013
    A002 07/11/2013
    A003 10/11/2013
    A001 15/11/2013
    A002 17/11/2013
    A003 20/12/2013
    A001 01/01/2014
    A002 07/01/2014
    A001 08/02/2014
    A002 15/03/2014
    A003 20/03/2014
    ;
    Run;
     
    Data table1;
    Set table1;
    if DATE_RES > today() + 90 then delete; /* suppression des réservation supérieures à 90 jours */
    Run;
     
    Proc sort data=table1;
    By ID DATE_RES;
    Run;
     
    Data table1 (keep=ID NUMBER_RES);
    Set table1;
    By ID DATE_RES;
    If first.ID then NUMBER_RES=0;
    Else NUMBER_RES+1;            /* Compteur des réservations dans les 90 jours par ID */
    If last.ID;
    Run;

  3. #3
    Membre averti
    Homme Profil pro
    Dataminer
    Inscrit en
    Mai 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dataminer

    Informations forums :
    Inscription : Mai 2013
    Messages : 14
    Par défaut
    Bonjour,

    Merci pour la réponse.
    Je n'ai pas été très clair. Ce que je souhaite obtenir (dans une table), c'est le nombre de réservations futures dans les 90 jours pour chaque réservation.

    Voici ce qu'il me faudrait :

    ID_client date_resa Nb_futur_resa_90j
    1 01/01/2013 2
    1 14/01/2013 1
    1 17/01/2013 0
    1 16/06/2013 0
    2 01/04/2013 0
    3 08/05/2013 1
    3 10/06/2013 0
    4 01/01/2013 0

    Comme ceci ...

    C'est plus clair ?

    Merci,
    Laurent

  4. #4
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2011
    Messages : 95
    Par défaut
    Bonjour,

    Si c'est ton objectif, alors tu peux avoir le même résultat en une seule étape avec une proc sql:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    proc sql;
       CREATE TABLE Table2 AS
       SELECT ID,count(DATE_RES)as val
       FROM table1
       WHERE DATE_RES<today()+90
       GROUP BY ID;
    quit;
    sinon merci de nous mettre un exemple de ta base de données avec un exemple de resultat souhaité.

    bn crg,

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2011
    Messages : 95
    Par défaut
    dans ce cas tu fais une somme sur ta variable reservation : sum (...) dans la même proc sql

  6. #6
    Membre averti
    Homme Profil pro
    Dataminer
    Inscrit en
    Mai 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dataminer

    Informations forums :
    Inscription : Mai 2013
    Messages : 14
    Par défaut
    Ma table est construite comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    proc sql;
    create table valeur2 as
    select distinct
    id_reservation,
    id_lfcustomer,
    date_resa
    from valeur as v
    ;
    quit;
    J'aimerai :
    Pour chaque réservation (donc pour chaque ligne sans en supprimer) :
    Combien le client va-t-il refaire de réservation(s) dans les 90 jours suivant la réservation. (il n'y a pas de notion d'aujourd'hui)

    Vous voyez ?

    Merci,
    Laurent

  7. #7
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2011
    Messages : 95
    Par défaut
    D'accord je vois,

    essaye ce code et dis moi si c'est ce que tu cherches ?

    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
    data table2;
    	set table1;
    		diff=dif(date);
    	by id;
    		if first.id then diff=0;
    		if first.id then sum=0;
    		sum + diff;
    	if sum<90 then val=1; else val=0;
    		if first.id then total=0;
    		total+val;
    		var=total-1;
    		if val=0 then var=0;
    drop diff sum total val;
    run;
     
    proc sort data=table2 out=table3;by id descending var;run;
     
    data final; merge table2 table3; by id; run;
    KIRA

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL-5.0] Compter le nombre de matériel sur une période
    Par vanitom dans le forum Requêtes
    Réponses: 0
    Dernier message: 20/10/2013, 15h57
  2. Compter le nombre de caractère sur une chaine de caractères
    Par Quentin.vdv dans le forum VBScript
    Réponses: 1
    Dernier message: 05/11/2012, 17h49
  3. compter le nombre de clic sur une image
    Par michel71 dans le forum Langage
    Réponses: 8
    Dernier message: 24/01/2011, 16h24
  4. compter le nombre de requêtes sur une bdd
    Par sp2308 dans le forum Débuter
    Réponses: 4
    Dernier message: 11/01/2011, 23h25
  5. [C#] Compter le nombre de TEXTBOX sur une page ASPX
    Par alain_27 dans le forum ASP.NET
    Réponses: 9
    Dernier message: 27/05/2005, 14h19

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