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 :

Comment faire apparaître toutes les valeurs d'une variable dans une procédure


Sujet :

SAS Base

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Chargée d'études statistiques
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Chargée d'études statistiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Comment faire apparaître toutes les valeurs d'une variable dans une procédure
    Bonjour à tous,

    je recherche à afficher toutes les valeurs d'une variable.

    Par exemple, ma variable it1 a 4 valeurs : 1,2,9 et 0. Mais lorsque je fais un filtre dans une Proc Freq, je n'obtiens pas toutes les valeurs.

    it1e Fréquence Fréquence cumulée
    1 6 6
    9 4 10

    J'aimerais obtenir ceci :

    it1e Fréquence Fréquence cumulée
    1 6 6
    2 0 6
    9 4 10
    0 0 10

    Quelqu'un aurait-il la solution??

    Merci de votre aide

  2. #2
    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,
    C’est normal car, avant de faire la proc freq , les deux modalités ne se trouvent pas dans la variable itle.
    Il faut créer une table SAS de fréquences en insérant les modalités manquantes (0 et 2) avec un poids égal à zéro pour chacune d’elles puis utiliser l'option WEIGHT de proc FREQ et l'option ZERO comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    data freq ;   
    input it1e Poids ;     
    cards ; 
    0 0
    2 0
    1 6
    9 4
    ;  run ;      
     
    proc freq data=freq ;
    weight Poids / zeros;
    tables it1e /  out=out_freqs ;
    run;
    Cdt Ward

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Chargée d'études statistiques
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Chargée d'études statistiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    merci pour votre réponse mais je crois que je me suis mal expliquée!

    Ma variable it1 contient 4 modalités : 1,2,9 et 0.

    Lorsque je fais un proc freq sur le total, chaque modalité a des effectifs :

    it1e Fréquence Fréquence cumulée
    1 26 6
    2 10 36
    9 34 70
    0 20 90

    et c'est lorsque je sélectionne des sous populations que je n'obtiens pas toutes les modalités.

    Sous-Population A :

    it1e Fréquence Fréquence cumulée
    1 6 6
    9 4 10

    J'aimerais donc voir apparaître pour chaque sous-population toutes les modalités de la variable it1.

    Cordialement

  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
    Comment vous avez fait la sélection et à quel niveau ?

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Chargée d'études statistiques
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Chargée d'études statistiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Voici extrait de ma base de données (j'ai au total 606 individus) :

    commune établissement effectif_etablissement identifiant it1 it2 it3 it4
    971 BA Mau 20 1 9 2 2 2
    971 BA Mau 20 2 0 1 9 9
    971 BA Cham 22 12 1 9 2 0
    971 BA Cham 22 14 2 1 9 0
    971 STC Issa 23 27 1 1 9 9
    971 STC Issa 23 31 9 0 9 9
    971 VFO Ving 23 54 1 9 0 0
    971 VFO Ving 23 58 1 2 1 1
    971 GOU Dora 20 72 1 1 1 9
    971 GOU Dora 20 77 1 1 9 0

    Si je fais une proc freq sur la totalité de la base, je vois bien apparaître toutes les modalités pour chaque variable.

    Par contre, par exemple si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    proc freq data=base;
    table it1;
    by etablissement;
    run;
    pour l'établissement MAU, j'obtiens les résultats suivants pour la variable it1 :

    it1e Fréquence Fréquence cumulée
    9 1 1
    0 1 2

    J'aimerais obtenir ceci:

    it1e Fréquence Fréquence cumulée
    1 0 0
    2 0 0
    9 1 1
    0 1 2

    Une idée???

  6. #6
    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,
    On voit mieux votre problématique. En fait, il y'a plusieurs solutions et je vous propose la plus courte et qui correspond bien à votre base. La clé, de cette proposition est l'option SPARSE de la proc FREQ qui va créer, pour chaque modalité de la variable établissement, les modalités manquantes de la variable it1. C'est pour cette raison votre base va être, au moins, doublée. Vérifions d'abord l'effet SPARSE sur la base avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    proc freq data=base(keep=etablissement it1) noprint ;
    tables etablissement*it1 / out=freq_it1 (drop=percent) sparse ;		 
    run ;
    Cdt Ward

  7. #7
    Nouveau Candidat au Club
    Femme Profil pro
    Chargée d'études statistiques
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Chargée d'études statistiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    merci pour votre retour.

    j'obtiens bien ma table avec les 4 modalités de ma variable.

    établissement it1e Nombre d'occurrences
    Ado 0 0
    Ado 1 15
    Ado 2 0
    Ado 9 1
    Ana 0 0
    Ana 1 11
    Ana 2 5
    Ana 9 11
    Bern 0 1
    Bern 1 10
    Bern 2 4
    Bern 9 7


    par contre, comment faire pour obtenir un tableau. Si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    proc freq data=eval.freq_it1e;
    table it1e;
    by etablissement;
    run;
    j'obtiens ceci :

    etablissement=Ado

    it1e Fréquence Pourcentage
    0 1 25.00
    1 1 25.00
    2 1 25.00
    9 1 25.00

    Autre question : j'ai plusieurs variables : it1e, it2e, it3e,..................it21e. Comment faire ? Je dois écrire le programme que vous m'avez communiqué pour chaque variable?

    Cordialement,

  8. #8
    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
    Citation Envoyé par Blandine971 Voir le message
    Bonjour,
    par contre, comment faire pour obtenir un tableau. Si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    proc freq data=eval.freq_it1e;
    table it1e;
    by etablissement;
    run;
    Bonjour,
    Je reprend votre code rectifié comme ceci "A vérifier" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    proc freq data=eval.freq_it1e;
    by etablissement ;
    weight Nombre_doccurrences / zeros ;
    table it1e;
    run;
    Cordialement Ward

  9. #9
    Nouveau Candidat au Club
    Femme Profil pro
    Chargée d'études statistiques
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Chargée d'études statistiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Ça ne marche pas, SAS ne connait pas "Nombre_doccurrences". Je n'ai pas créé cette variable, elle est apparue avec le programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    proc freq data=eval.tableclasse(keep=etablissementt it1e) noprint ;
    tables etablissement*it1e / out=eval.freq_it1e (drop=percent) sparse ;		 
    run ;

  10. #10
    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
    Oui, j'ai utilisé Nombre_doccurrences dans le code rectifié car j'ai vu cette variable dans la sortie de votre nouvelle table :établissement it1e Nombre d'occurrences . Vous pouvez mettre COUNT à la place.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    proc freq data=eval.freq_it1e;
    by etablissement ;
    weight COUNT / zeros ;
    table it1e;
    run;

  11. #11
    Nouveau Candidat au Club
    Femme Profil pro
    Chargée d'études statistiques
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Chargée d'études statistiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup, ça marche!!!!

    À présent, comment faire pour obtenir toutes mes variables de it1e à it23e pour tous les établissements. Je m'explique : je souhaite créer un fichier EXCEL pour chaque établissement et dans ce fichier, je voudrais voir apparaître mes variables, les unes en dessous des autres.

    Un fichier EXCEL pour l’établissement Ado avec les variables it1e à it23e :

    it1e Fréquence Pourcentage Fréquencecumulée Pourcentagecumulé
    0 0 0.00 0 0.00
    1 15 93.75 15 93.75
    2 0 0.00 15 93.75
    9 1 6.25 16 100.00

    it2e Fréquence Pourcentage Fréquencecumulée Pourcentagecumulé
    0 0 0.00 0 0.00
    1 11 40.74 11 40.74
    2 5 18.52 16 59.26
    9 11 40.74 27 100.00
    ...
    ....
    ....
    jusqu'à ma variable it23e

    it2e Fréquence Pourcentage Fréquencecumulée Pourcentagecumulé
    0 0 0.00 0 0.00
    1 11 40.74 11 40.74
    2 5 18.52 16 59.26
    9 11 40.74 27 100.00

  12. #12
    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
    Justement, votre base est automatisable et c'est la raison pour laquelle je vous ai proposé une solution courte rend plus facile l'automatisation de cette base : (j'ai adapté cette macro pour la requête. A vérifier)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    %MACRO Freq_By_Moda ;
    %DO I=1 %TO 23  ; 
    proc freq data=base(keep=etablissement it&i.e) noprint ;
    tables etablissement*it&i.e / out=eval.freq_it&i.e (drop=percent) sparse ;	
    run ;  
    
    proc freq data=eval.freq_it&i.e ;
    by etablissement ;
    weight COUNT / zeros ;
    tables it&i.e ; 
    run;
    %MEND Freq_By_Moda ;	%Freq_By_Moda ;
    Bon courage

  13. #13
    Nouveau Candidat au Club
    Femme Profil pro
    Chargée d'études statistiques
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Chargée d'études statistiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Bonsoir,

    la macro n'a pas fonctionnée. J'obtiens ce message d'erreur :

    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
    %MACRO Freq_By_Moda ;
    216  %DO I=1 %TO 26  ;
    217  proc freq data=eval.tableclasse(keep=enseignant it&i.e) noprint ;
    218  tables enseignant*it&i.e / out=eval.freq_it&i.e (drop=percent) sparse ;
    219  run ;
    220
    221  proc freq data=eval.freq_it&i.e ;
    222  by enseignant ;
    223  weight COUNT / zeros ;
    224  tables it&i.e ;
    225  run;
    226  %MEND Freq_By_Moda ;    %Freq_By_Moda ;
    ERROR: There were 1 unclosed %DO statements.  The macro FREQ_BY_MODA will not be compiled.
    ERROR: A dummy macro will be compiled.
    226  %MEND Freq_By_Moda ;    %Freq_By_Moda ;
                                 -
                                 180
    ERROR 180-322: Statement is not valid or it is used out of proper order.
     
    WARNING: Apparent invocation of macro FREQ_BY_MODA not resolved.

  14. #14
    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
    Citation Envoyé par Blandine971 Voir le message
    Bonsoir,
    la macro n'a pas fonctionnée. J'obtiens ce message d'erreur :

    ERROR: There were 1 unclosed %DO statements. The macro FREQ_BY_MODA will not be compiled.
    Bonsoir,
    Oui, au moment de l'adaptation de la macro j'ai oublié de fermer la boucle avec l'instruction %END.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    %MACRO Freq_By_Moda ;
    %DO I=1 %TO 23  ; 
    proc freq data=base(keep=etablissement it&i.e) noprint ;
    tables etablissement*it&i.e / out=eval.freq_it&i.e (drop=percent) sparse ;	
    run ;  
    
    proc freq data=eval.freq_it&i.e ;
    by etablissement ;
    weight COUNT / zeros ;
    tables it&i.e ; 
    run;
    %END ;
    %MEND Freq_By_Moda ;	%Freq_By_Moda ;
    je pense que ça va tourner maintenant.

  15. #15
    Nouveau Candidat au Club
    Femme Profil pro
    Chargée d'études statistiques
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Chargée d'études statistiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    la macro fonctionne, c'est génial!!

    J'ai une demande complémentaire. je souhaiterais concaténer mes 26 tables, it1e à it26e en une seule et même table. J'ai essayé la mais j'obtiens une erreur. J'ai bien sûr au préalable trier les 26 tables par la variable établissement.

    data merge eval.freq_it1e eval.freq_it2e eval.freq_it3e eval.freq_it4e eval.freq_it5e eval.freq_it6e eval.freq_it7e eval.freq_it8e eval.freq_it9e eval.freq_it10e eval.freq_it11e
              -----
              56
    ERROR 56-185: MERGE is not allowed in the DATA statement when option DATASTMTCHK=COREKEYWORDS.  Check for a missing semicolon in the DATA statement, or use DATASTMTCHK=NONE.
    
    360  eval.freq_it12e eval.freq_it13e eval.freq_it14e eval.freq_it15e eval.freq_it16e eval.freq_it17e eval.freq_it18e eval.freq_it19e eval.freq_it20e eval.freq_it21e eval.freq_it22e
    361  eval.freq_it23e eval.freq_it24e eval.freq_it25e eval.freq_it26e;
    362  by etablissement;
    ERROR: No SET, MERGE, UPDATE, or MODIFY statement is present.
    363  run;
    Une idée???

  16. #16
    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,
    Vous souhaitez juxtaposer les nouvelles tables des fréquences contenant les modalités manquantes pour chaque variable (it1e, it2e, ..... it26e). Ce travail nécéssite également une nouvelle automatisation ; donc il est plus judicieux d'insérer des codes au sein de la macro Freq_By_Moda pour faire la concaténation dans une seule table SAS.

    Note :
    >> J'ai utilisé l'instruction " ODS OUTPUT ONEWAYFREQS " et la placé juste au dessus de la proc FREQ afin de récupérer des informations, relatives aux fréquences, dans la table SAS créée comme : Le nom de la Table, Fréquence, Percent, Fréquence Cum, Percent Cum.
    >> A chaque lecture d'une variable, je lui donne un nouveau nom " Modalites " afin de pouvoir concaténer les modalités de toutes les variables dans la table Finale.

    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
     
    %MACRO Freq_By_Moda ;
    %DO I=1 %TO 26  ; 
    proc freq data=BASE (keep=etablissement it&i.e) noprint ;
    tables etablissement*it&i.e / out=eval.FREQ_it&i.e (drop=percent) sparse ;	run ;  
     
    ods listing close ;
    ods output OneWayFreqs=FREQS ( rename=(it&i.e=Modalites) drop=F_it&i.e ) ;
    proc freq data=eval.FREQ_it&i.e ;
    by etablissement ;
    weight count / zeros ;
    tables it&i.e ;
    run;   
     
    %IF &I=1 %THEN %DO;  data eval.FINALE ;  set FREQS  ;             run ; %END;
    	 %ELSE %DO;  data eval.FINALE ;  set eval.FINALE FREQS  ; run ; %END;
    %END ;
    ods listing ;
    proc print data=eval.FINALE ;  run  ; 	
    %MEND Freq_By_Moda ;	%Freq_By_Moda ;
    Bon Courage Ward

  17. #17
    Nouveau Candidat au Club
    Femme Profil pro
    Chargée d'études statistiques
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Chargée d'études statistiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    merci de votre retour. J'obtiens bien une table mais je me suis mal exprimée dans mon message précédent.

    J'obtiens cette table :

    etablissement Table Modalites Fréquence .........
    ADO Table it1e 0 0
    ADO Table it1e 1 5
    ADO Table it1e 2 3
    ADO Table it1e 9 4
    BER Table it1e 0 1
    BER Table it1e 1 4
    BER Table it1e 2 1
    BER Table it1e 9 12
    .....
    ADO Table it2e 0 0
    ADO Table it2e 1 6
    ADO Table it2e 2 3
    ADO Table it2e 9 4
    BER Table it2e 0 1
    BER Table it2e 1 4
    BER Table it2e 2 1
    BER Table it2e 9 12

    Mais j'aimerais obtenir cette table :

    etablissement it1e Nombre d’occurrences it1e it2e Nombre d’occurrences it2e ......... it26e Nombre d’occurrences it26e
    ADO 0 0 0 11 0 5
    ADO 1 15 1 5 1 4
    ADO 2 3 2 2 2 7
    ADO 9 4 9 4 9 6
    BER 0 1 0 11 0 5
    BER 1 4 1 5 1 4
    BER 2 1 2 2 2 7
    BER 9 12 9 4 9 6
    .....

    Est-ce possible?

  18. #18
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    data test;
    input
    commune $	etablissement $	effectif_etablissement $	identifiant	it1	it2	it3	it4;
    cards;
    971BA	Mau	  20	1	9	22	222	5555
    971BA	Mau	  20	2	0	11	777	6666
    971BA	Cham  22	12	12	99	222	7777
    971BA	Cham  22	12	12	11	111 1000
    971STC	Issa  23	27	1	39	999	9999
    971STC	Issa  23	31	9	10	999	9999
    971VFO	Ving  23	54	1	99	555	1000
    971VFO	Ving  23	58	1	55	111	1111
    971GOU	Dora  20	72	1	11	666	1000
    971GOU	Dora  20	77	1	11	999	1000
    ;
    run;
     
     
    %macro tt();
    proc sql;
    create table test1 as select  *
     
    from
    ( 
    select distinct * from 
    ( select distinct etablissement from test) ,
    ( select distinct it1 as mod from test )
     
    ) 
    %do i=2 %to 4;
     
    outer   union  corresponding
     
    ( select distinct * from 
    ( select distinct etablissement from test) ,
    ( select distinct it&i as  mod from test )
    )
    %end; 
    ;quit;
    %mend tt;
     
    %tt;
     
    %macro tt1();
    %do i=1 %to 4;
    proc sql;
     
    create table testg&i as select distinct t1.etablissement,t1.mod, count(t.it&i) as nbr&i from 
     
    test1 as t1
     
     
    left join test as t
    on t1.etablissement=t.etablissement
    and t1.mod=t.it&i
    group by t1.etablissement,t.it&i
    order by etablissement ,mod
    ;quit;
    %end;
     
     
    %mend tt1;
     
    %tt1;
     
    proc sort data =test1 ;by etablissement mod; run; 
     
    data fin;
    set test1 testg:;
    by etablissement mod;
    run;
    Cordialement
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia....avance?uid=162

  19. #19
    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,
    Je suis désolé d'avoir mal compris la question car ma dernière proposition a été fondée sur la configuration de vos tables que vous avez postée le 19/11/2018 quadrant #11. Voici une nouvelle version de la macro qui donne le résultat souhaité :
    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
     
    %MACRO Freq_By_Moda2 ;
    %DO I=1 %TO 26  ; 
    proc freq data=BASE (keep=etablissement it&i.e) noprint ;
    tables etablissement*it&i.e / out=eval.FREQ_it&i.e (drop=percent) sparse ;		 
    run ;  
     
    proc freq data=eval.FREQ_it&i.e noprint ;
    by etablissement ;
    weight count  / zeros ;
    tables it&i.e / out=FREQS ( rename=(Count=FREQ_it&i.e)  drop=percent )	;
    run;   
     
    %IF &I=1 %THEN %DO;  data eval.FINALE ;  set FREQS  ;                   run ; %END;
    	 %ELSE %DO;  data eval.FINALE ;  set eval.FINALE ; set FREQS  ; run ; %END;
    %END ;
     
    proc print data=eval.FINALE ;  run  ; 	
    %MEND Freq_By_Moda2 ;	%Freq_By_Moda2 ;
    Cordialement Ward

Discussions similaires

  1. [AC-2003] mettre a jour toutes les valeurs d'un colonne dans une zone de liste
    Par yieiyiei dans le forum VBA Access
    Réponses: 1
    Dernier message: 29/04/2015, 21h41
  2. Réponses: 1
    Dernier message: 18/03/2011, 18h35
  3. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  4. Réponses: 6
    Dernier message: 23/03/2009, 15h40
  5. Réponses: 3
    Dernier message: 13/01/2009, 16h55

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