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 :

Calcul de nombre de fois par visite [DATA]


Sujet :

SAS Base

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 86
    Points : 83
    Points
    83
    Par défaut Calcul de nombre de fois par visite
    bonjour a tous,

    j ai une table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    DATA CLASS;
         INPUT NAME $ 1-8 semaine $10-16 jour $ 18-24  visit 28 ;
    CARDS;
    JOHN       W01    Lundi    1 
    JAMES      W01    Lundi    1
    ALFRED     W01    Lundi    1
    ALICE      W01    Lundi    1
    JOHN       W02    Mardi    1 
    JAMES      W02    Mardi    1
    ALFRED     W02    Mardi    1
    ;run;
    je veux un output qui ressemble a cela

    JOHN W01 Lundi 1
    JAMES W01 Lundi 1
    ALFRED W01 Lundi 1
    ALICE W01 Lundi 1
    JOHN W02 Mardi 1
    JAMES W02 Mardi 1
    ALFRED W02 Mardi 1
    ALICE W02 Mardi 0
    je veux pour chaque eleve pour chaque semaine /JOUR qu il a pas eu de visit de mettre 0
    comme le cas pour ALICE W02 Mardi

  2. #2
    Membre éprouvé
    Avatar de m.brahim
    Homme Profil pro
    SAS / BIG DATA
    Inscrit en
    Juillet 2011
    Messages
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : SAS / BIG DATA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 461
    Points : 1 119
    Points
    1 119
    Billets dans le blog
    14
    Par défaut
    Bonjour,
    Je te propose cette solution:
    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
    51
     
    DATA CLASS;
         INPUT NAME $ 1-8 semaine $10-16 jour $ 18-24 ;
    CARDS;
    JAMES      W01    Lundi
    ALFRED     W01    Lundi
    ALICE      W01    Lundi
    JOHN       W01    Mardi 
    JAMES      W02    Lundi
    ALFRED     W02    Lundi
    ALICE      W02    Lundi
    JOHN       W02    Mardi 
    JAMES      W03    Lundi
    ALFRED     W03    Lundi
    ALICE      W03    Lundi
    ALFRED     W04    Lundi
    ALICE      W04    Lundi
    ALFRED     W05    JEUDI
    ;run; 
     
     
    proc sql;
    create table aa as select distinct jour,semaine from class;
    create table ab as select distinct name from class;
    quit;
     
    proc sql;
    create table fin1 as select distinct  * from  aa cross join ab
    ;
    quit;
     
    proc sort data=class ;by name semaine ;run;
    proc sort data=fin1 ;by name  semaine;run;
     
    data fin2;
    merge fin1(in=a) class(in=b);
    by name semaine;
    if not b;
    run;
     
    data fin3;
    set fin2;
    visite=0;
    run;
     
    data fin4;
    set class fin3;
    if visite ne 0 then visite=1;
    run;
     
    proc sort data=fin4 out=fin; by semaine jour;run;
    Cordialement
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia....avance?uid=162

  3. #3
    Membre éclairé
    Homme Profil pro
    responsable adjoint service stat
    Inscrit en
    Mars 2009
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : responsable adjoint service stat
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2009
    Messages : 448
    Points : 823
    Points
    823
    Par défaut
    Pour le plaisir de réfléchir à une solution alternative (et sans SQL),
    Une solution avec la proc FREQ et son option SPARSE, qui permet de mettre 0 pour les croisements sans occurrences.
    Rémi

    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
    data CLASS ;
        set CLASS ;
        attrib semaine_jour length = $15 ;
        semaine_jour = semaine !! " " !! jour ; 
    run ; 
    proc freq data =  CLASS noprint ;
        tables NAME * semaine_jour 
        / out = WORK.RESULTAT (rename = (COUNT = visit) drop =  PERCENT)
          sparse  ;
    run ; 
    data RESULTAT ;
        set RESULTAT ;                  
        semaine = scan(semaine_jour, 1);
        jour    = scan(semaine_jour, 2);
    run ;

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur en SAS/ Statisticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 483
    Points : 1 552
    Points
    1 552
    Par défaut
    Bonjour,
    3ème solution en 3 PROC :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    proc freq data =class noprint ;
    tables name*semaine*jour / out=freq_class ;
    run ;   
    proc freq data=freq_class noprint ;
    table name*semaine / out=temp (rename = (count = visit) drop = percent) sparse ;
    run ;    
    proc sql ;
    create table Finale  as
    select distinct * 
    from temp as a, class (keep=semaine jour) as b
    where  a.semaine=b.semaine ;
    quit ;
    Cdt Ward

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

Discussions similaires

  1. requete pour le calcul de nombre de fois
    Par mjihanne dans le forum Access
    Réponses: 2
    Dernier message: 05/02/2008, 13h49
  2. Réponses: 6
    Dernier message: 12/01/2008, 18h21
  3. Réponses: 5
    Dernier message: 11/09/2007, 17h15
  4. Calcul du nombre d'images par seconde
    Par Mindiell dans le forum SDL
    Réponses: 5
    Dernier message: 19/03/2007, 22h12
  5. Réponses: 3
    Dernier message: 23/06/2006, 11h53

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