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 :

Table pour modalité d'une variable + effectif pour autre variable


Sujet :

SAS Base

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 30
    Points : 30
    Points
    30
    Par défaut Table pour modalité d'une variable + effectif pour autre variable
    Bonjour à tous

    Je me tourne vers vous pour me guider dans ma programmation

    J'ai une table qui se présente à peu près comme dans le fichier texte joint.

    Je dois faire une table SAS pour certaines modalités de certaines variables.

    Par exemple, une table pour les "jeunes" (modalité 15_20 de la variable trancheAge) ou une table pour la catégorie A (modalité A de la variable cat). Je ne dois pas avoir forcément une table pour chaque modalité des variables.

    Ensuite dans chacune des tables : effectif pour chaque modalité des autres variables (sauf codezone).

    Par exemple, si je veux une table pour les femmes : voir fichier Excel joint.


    voila ce que j'ai fait :

    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
    proc sql;
    	create table bidule as
    		select sexe, codezone, 
    			sum(case when cat eq 'A'  then 1 else 0 end) as cat_A,
    			sum(case when cat eq 'B'  then 1 else 0 end) as cat_B,
    			sum(case when cat eq 'C'  then 1 else 0 end) as cat_C,
    			sum(case when MotifE eq 'rupture'  then 1 else 0 end) as rupture,
    			sum(case when MotifE eq 'deces'  then 1 else 0 end) as deces,
    			sum(case when MotifE eq 'licenciement' then 1 else 0 end) as licenciement,
    			sum(case when MotifE eq 'maladie' then 1 else 0 end) as maladie,
    			sum(case when trancheAge eq '15-24'  then 1 else 0 end) as _15_24,
    			sum(case when trancheAge eq '25_49' then 1 else 0 end) as _25_49,
    			sum(case when trancheAge eq 'plus_50' then 1 else 0 end) as plus_de_50
    		from truc
                    where sexe='femme'
    		group by sexe, codezone;
    quit;
    Est-ce que je me complique la vie en faisant cela ? N'y a t'il pas plus simple ?

    Merci d'avance.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éclairé

    Femme Profil pro
    SAS FRANCE - Support Clients France et Europe
    Inscrit en
    Février 2010
    Messages
    289
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : SAS FRANCE - Support Clients France et Europe
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 289
    Points : 886
    Points
    886
    Par défaut
    Bonjour,

    Votre solution suppose une maintenance car les modalités sont écrites en dur, ce qui est ennuyeux si les modalités venaient à évoluer. Je vous propose une méthode avec plus de code, plusieurs étapes, en utilisant :
    - la proc summary pour calculer les valeurs du tableau
    - la proc transpose pour passer les modalités en colonne


    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
    52
    53
    /* données exemple */
    data data1 ;
    length codezone $2. cat $1. sexe $8. trancheAge $10. MotifE $20. ;
    input codezone $ cat $ sexe $ trancheAge $	MotifE $ ;
    cards ;
    33	A	femme	15_24	rupture
    21	B	femme	25_49	licenciement
    45	B	homme	plus_50	licenciement
    33	A	femme	plus_50	deces
    44	B	homme	25_49	maladie
    44	B	homme	15_24	maladie
    21	C	femme	25_49	maladie
    33	C	femme	15_24	licenciement
    45	A	femme	plus_50	deces
    45	A	homme	25_49	rupture
    ;
    run ;
     
    /* ajout d'une variable d'analyse pour calculer la fréquence */
    data data2 ;
      set data1 ;
      n=1;
      run ;
     
    /* calcul de la fréquence pour chaque variable */
    proc summary data=data2 ;
    class  sexe codezone trancheAge cat MotifE ;
    var n ;
    output out=data3 (drop=_type_ _freq_ where=(sexe ne '' and codezone ne '')) sum=;
    run ;
     
    /* transposition des valeurs pour chaque variables de catégorie */
    proc transpose data=data3 (where=(cat ne '' and trancheAge eq '' and MotifE eq ''))
                   out=data4 (drop=_name_)  ;
    by  sexe codezone ;
    ID cat  ;
    run ;
    proc transpose data=data3 (where=(cat eq '' and trancheAge ne '' and MotifE eq ''))
                   out=data5 (drop=_name_)  ;
    by  sexe codezone ;
    ID trancheAge  ;
    run ;
    proc transpose data=data3 (where=(cat eq '' and trancheAge eq '' and MotifE ne ''))
                   out=data6 (drop=_name_)  ;
    by  sexe codezone ;
    ID MotifE  ;
    run ;
     
    /* jointure des 3 résultats */
    data data7 ;
      merge data4 data5 data6 ;
      by  sexe codezone ;
    run ;

    Il y peut-être plus simple, plus court...
    mais dans l'ensemble je pense qu'il faut éviter d'utiliser les valeurs.

    Bonne journée,
    Géraldine Cade-Deschamps
    Support Clients SAS

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/10/2014, 11h19
  2. lecture d'une cellule excel pour affichage dans une page web
    Par smartbis dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 22/05/2008, 09h33
  3. [MySQL] Je souhaite avoir le résultat d'une requête visible pour tous sur une page de Forum
    Par paradogz dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 25/01/2008, 11h18
  4. Réponses: 5
    Dernier message: 20/02/2007, 06h27
  5. Réponses: 3
    Dernier message: 21/10/2006, 12h39

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