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

Débutez Discussion :

Calcul du nombre de lignes en fonction d'une condition


Sujet :

Débutez

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 11
    Par défaut Calcul du nombre de lignes en fonction d'une condition
    Bonjour à tous,

    J'ai l'habitude de coder sous R, mais je suis novice sous SAS.
    Or, j'ai à traiter des fichiers de dizaines de millions de lignes, donc je suis obligé de l'utiliser.

    Bref, ce que je cherche à faire va vous paraitre simple, mais pas à moi.

    Sous R cela se code comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    U=unique(tab[,1])
     
    for (i in 1:length(U))
    {print(length(which(tab[,1]==U[i] & tab[,2]=="SMS")))}
    En gros, pour chaque élément unique de la colonne 1 (qui comprend par exemple 10 chaines de caractères différentes), je souhaite savoir combien de lignes ont la chaine de caractere "SMS" en colonne 2.

    Je ne sais pas si je suis clair mais je répondrai aux questions s'il y en a!

    A savoir que j'ouvre juste la table sas manuellement et qu'elle est donc stockée en TMP2.nom dans SAS.

    En vous remerciant

    Didier

  2. #2
    Rédacteur

    Homme Profil pro
    SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Inscrit en
    Avril 2009
    Messages
    2 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 2 497
    Par défaut
    Je ne sais pas si je suis clair mais je répondrai aux questions s'il y en a!
    Ca tombe bien. Peux-tu créer un jeu de test que l'on comprenne le résultat attendu ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 11
    Par défaut
    oui voilà un exemple

    dat_debt_reel_camp libl_supp_camp
    1 20NOV2009 MMS
    2 01NOV2009 SMS
    3 06NOV2009 E-Mailing
    4 01NOV2009 SMS
    5 20NOV2009 MMS
    6 16NOV2009 SMS
    7 09NOV2009 SMS
    8 01NOV2009 SMS
    9 16NOV2009 SMS
    10 09NOV2009 SMS


    10 lignes de mon fichier

    et ce que je veux obtenir :
    pour la date 20NOV2009 : 2 MMS, 0 SMS, 0 E-Mailing
    pour la date 09NOV2009 : 2 SMS, 0 MMS, 0 E-Mailing

    etc pour chaque date de ma colonne 1.

    j'espère avoir été plus clair

    cordialement

  4. #4
    Rédacteur

    Homme Profil pro
    SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Inscrit en
    Avril 2009
    Messages
    2 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 2 497
    Par défaut
    Si tu exécutes ce code tu vas générer un fichier de sortie (une sorte de listing) et une table RESULTAT dans une bibliothèque appellée WORK.

    Cela répond-t-il à ta question ?

    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
    data test;
    input n dat  $ libl  $;
    cards;
    1 20NOV2009 MMS
    2 01NOV2009 SMS
    3 06NOV2009 E-Mailing
    4 01NOV2009 SMS
    5 20NOV2009 MMS
    6 16NOV2009 SMS
    7 09NOV2009 SMS
    8 01NOV2009 SMS
    9 16NOV2009 SMS
    10 09NOV2009 SMS
    ;
    run;
     
    proc freq data=test;
    table dat*libl/list out=resultat;
    run;

  5. #5
    Membre Expert
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Par défaut
    La version sql du code présenté par datamétric:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    proc sql;
    	create table TEST2 as 
    	select distinct dat_debt_reel_camp, libl_supp_camp, count (libl_supp_camp) as cnt
    	from TEST
    	group by dat_debt_reel_camp
    ;
    quit;

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 11
    Par défaut
    alors tout d'abord merci à vous

    mais mon premier problème est de charger ma table SAS.

    Elle est affichée dans le logiciel, mais comment dire à SAS que je travaille sur cette base là ?

    son nom étant de la forme : TMP2.table

    Cordialement

  7. #7
    Membre Expert
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Par défaut
    TMP2.TAB indique que la table appelée TAB stockée dans la librairie TMP2 sera traitée.

    Ta librairie doit être défini auparavant par la commande libname TMP2 "ton chemin dans l'arborescence";

    et pour pouvoir lire cette table assure toi que les formats associés à cette table est biens été chargés.

    Mon code devient alors (cela suppose que les noms de tes variables soient corrects):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    proc sql;
    	CREATE TABLE TEST2 AS 
    	SELECT DISTINCT dat_debt_reel_camp, libl_supp_camp, count (libl_supp_camp) AS cnt
    	FROM TMP2.TAB
    	GROUP BY dat_debt_reel_camp
    ;
    quit;
    tu créeras la table temporaire TEST2 qui sera stockée dans la librairie WORK et qui sera détruite à la fin de ta session SAS.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 11
    Par défaut
    Merci pour vos réponses cela m'a bien aidé à avancer ...
    Pierre

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

Discussions similaires

  1. Calculer le nombre de date en fonction d'une condition.
    Par Mehdi8793 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 09/02/2015, 15h26
  2. Compter le nombre de lignes en fonction d'une variable.
    Par sumakali31 dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 11/04/2012, 18h13
  3. [XL-2003] Calculer le nombre de lignes non vide d'une colonne
    Par zangaloni dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/07/2011, 15h30
  4. [XL-2003] calcule le nombre de ligne non vide dans une colonne donnée
    Par aefmaaradji dans le forum Excel
    Réponses: 2
    Dernier message: 27/07/2010, 15h08
  5. [Debutant(e)]Calcul du nombre de ligne sous eclipse
    Par skywalker3 dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 10/12/2004, 08h53

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