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

ODS et reporting Discussion :

proc Tabulate : nombre limites de croisement autorisé par SAS


Sujet :

ODS et reporting

  1. #1
    Membre du Club

    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 44
    Points : 47
    Points
    47
    Par défaut proc Tabulate : nombre limites de croisement autorisé par SAS
    Bonjour à tous,

    J'ai l'erreur suivante qui s'affiche dans ma log suite à l'exécution d'une proc TABULATE.
    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
     
     
    15         proc tabulate data=t_donnees;
    16         		var nb_env_concernees;
    17         		class identifiant code_tranche lb_modele pages;
    18         		/*classlev occurence /style=[foreground=#6699FF];*/
    19         		table identifiant='Identifiant technique'
    20         						*(code_tranche='Tranche postale calculée')
    21         					    *(lb_modele="Modèle"*pages='Tranche postale du courrier'),
    22         		nb_env_concernees=''*
    23         	( n="Nb d'occurences de ce courrier avec cette tranche postale dans ce type d'enveloppe"/**
    24         	%FMT_STP(,0)*/ mean="Nb d'enveloppes concernées(*)"/** %FMT_STP(,0)*/);
    25         run;
     
    ERROR: La limite de 2147483647 interactions possibles dans un croisement est dépassée dans l'instruction en ligne 19.
    Je pense que la TABULATE doit croiser toutes les valeurs possibles prises par chaque ligne de mon tableau, qui du coup doit dépasser le nombre limites de croisement autorisé par SAS. Existerait-il une option pour contourner ce problème ?

    Je pourrais bien sur utiliser la proc report, mais j'ai pour contrainte d'utiliser la TABULATE...

    Merci d'avance pour vos retours !

    Sylvain.

  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 : 51
    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
    Points : 6 064
    Points
    6 064
    Par défaut
    regarde du côté de la proc FREQ si des tableaux à deux entrées ne te conviennent pas. La TABULATE est plutôt destinée à présenter des tableaux de synthèse de ce type.
    N'oubliez pas de cliquer sur lorsque votre problème est réglé !

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 161
    Points : 224
    Points
    224
    Par défaut
    Salut Sylvain,

    J'avais eu le même problème :

    J'avais dans un 1er temps 3 variables class, qui représentaient des libellés (Région, département, Produit).
    Quand mon client m'avait demandé de rajouter les codes associés, je me suis retrouvé avec le même souci que le tien, alors que je n'avais pas plus de lignes en sortie .

    Je ne vois pas pourquoi on t'interdirait la proc report (qui dans mon cas avait résolu mon pb). A moins que ce ne soit pour un projet d'étude.

    Sinon tes données sont elles aggrégées au maximum ? Mais bon, je ne pense pas que cela change qqch au final.

  4. #4
    Membre du Club

    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 44
    Points : 47
    Points
    47
    Par défaut
    Le client a des normes au niveau de ses restitutions, et il a signé les maquettes qu'on lui a proposé dans les specs. Et comme les maquettes ont été construites à partir des proc tabulate ...

    Après si il est possible d'adapter les proc report et Freq de tel sorte à avoir la même restit que la tabulate ?!

  5. #5
    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 : 51
    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
    Points : 6 064
    Points
    6 064
    Par défaut
    Sylvain,
    les specs étant ce qu'elles sont je comprends ton soucis mais ici ce n'est qu'un tableau croisé avec N variables.
    Tu peux y mettre des LABELS. Essaie et dit nous ce qui coince.
    N'oubliez pas de cliquer sur lorsque votre problème est réglé !

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 161
    Points : 224
    Points
    224
    Par défaut
    Je pense que ce que tu peux faire avec la proc tabulate tu dois pouvoir le faire avec la proc report.

  7. #7
    Membre du Club

    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 44
    Points : 47
    Points
    47
    Par défaut
    Datametric => j'ai un peu de mal à comprendre ton raisonnement... Désolé.
    Le code de ma proc tabulate est dans mon premier post, tous les libellés y sont présent.


    la2002 => je pense aussi, je vais essayer d'approfondir sur cette piste.

  8. #8
    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 : 51
    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
    Points : 6 064
    Points
    6 064
    Par défaut
    Ah.
    Je dis juste que tu peux faire une proc FREQ sans te casser la tête. je ne vois pas dans ton code quelque chose qui n'amènerait pas le même résultat.
    N'oubliez pas de cliquer sur lorsque votre problème est réglé !

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 161
    Points : 224
    Points
    224
    Par défaut
    Je pense que c'est l'instruction mean="Nb d'enveloppes concernées qui l'oblige à passer par une autre proc.

    De plus, si il veut faire du reporting, je ne suis pas sur que la proc freq permet de styler des lignes (Il a mis en commentaires une instruction foreground=#6699FF).

  10. #10
    Membre du Club

    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 44
    Points : 47
    Points
    47
    Par défaut
    Que donnerait dans ce cas le code de la proc freq stp ? je ne suis pas très à l'aise avec sa syntaxe.

    Le commentaire dans le code n'est pas à prendre en compte. Par contre j'ai essayé sans l'instruction MEAN, et le résultat est le même. Si j'enlève la variable "pages", le code fonctionne correctement... quand même bizarre ce comportement.

    Le problème aussi c'est que l'affichage se fait sur le portail SAS avec un style prédéfinie par le client qui n'est pas dans les styles par défaut de SAS. Et je n'aurais pas la possibilité de passer trop de temps à l'adaptation du code... En fait j'ai jusqu'à demain midi ! ;-)

  11. #11
    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 : 51
    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
    Points : 6 064
    Points
    6 064
    Par défaut
    pour la proc FREQ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    proc FREQ data=t_donnees;
    TABLE identifiant*code_tranche*lb_modele*pages*nb_env_concernees;
    LABEL  identifiant='Identifiant technique' code_tranche='Tranche postale calculée' lb_modele="Modèle" pages='Tranche postale du courrier' nb_env_concernees='Nb d'occurences de ce courrier avec cette tranche postale dans ce type d'enveloppe'
    ;
    run;
    ensuite tu as deux possibilités pour les styles. soit tu génères une table en sortie de la FREQ ( TABLE identifiant*code_tranche*lb_modele*pages*nb_env_concernees/ out=table
    et tu fais une proc PRINT dans laquelle tu peux appliquer des styles.
    Autrement, tu peux utiliser une REPORT sur cette table en sortie pour les styles.

    Au fait, tu as regardé si SUMSIZE=MAX ne te permet pas de supprimer le message d'erreur ?
    N'oubliez pas de cliquer sur lorsque votre problème est réglé !

  12. #12
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Citation Envoyé par maverik40 Voir le message
    Par contre j'ai essayé sans l'instruction MEAN, et le résultat est le même. Si j'enlève la variable "pages", le code fonctionne correctement... quand même bizarre ce comportement.
    La logique de TABULATE est la suivante : avant d'attaquer l'instruction TABLE pour connaître la disposition du tableau à produire, on préconstruit des calculs avec CLASS et VAR, un peu comme pour constituer un cube OLAP.
    Le message que tu as provient de cette étape-là. Donc changer des choses dans TABLE n'y fera rien.
    La variable PAGES change la donne, car elle n'est utilisée nulle par dans tes tableaux. Or, avant de le savoir, SAS veut l'utiliser dans ses calculs à l'avance et s'aperçoit que ça fait exploser le nombre de croisements.
    Si tu n'as effectivement pas besoin de PAGES, tu la vires du code et tout va bien. Si tu en as besoin, comme je le suppose vu son nom, pour faire autant de tableaux qu'elle a de modalités, tu la vires de CLASS et tu en fais un BY.
    Bon courage.
    Olivier
    Bon courage.
    Olivier

  13. #13
    Membre du Club

    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 44
    Points : 47
    Points
    47
    Par défaut
    Bonjour Messieurs,

    Tout d'abord merci pour vos réponses.
    J'ai testé la proc freq qui ne fonctionne pas non plus dans mon cas, avec comme insulte dans la log "ERROR: La table indiquée est trop grande pour être traitée."
    L'option SUMSIZE n'y change rien non plus, j'ai les mêmes erreurs tant pour la tabulate que pour la freq.

    En ce qui concerne l'utilisation du by, la tabulae s'exécute correctement, mais le résultat ne convient pas malheureusement...

    Je vous remercie quand même pour votre aide toujours aussi précieuse, et vais tenter d'adapter la REPORT afin d'approcher au max la sortie de la tabulate.

    Bonne journée à vous et à bientôt sur d'autres sujets !

    Sylvain.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 16/05/2011, 15h00
  2. Nombre de chiffres significatifs sortie proc tabulate
    Par lozeba dans le forum Débutez
    Réponses: 2
    Dernier message: 28/04/2011, 16h49
  3. [PROC] Remplacer un point par une virgule dans une Proc Tabulate
    Par PAULOM dans le forum SAS Base
    Réponses: 2
    Dernier message: 20/08/2009, 08h36
  4. afficher un nombre limité par page
    Par chamardal dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 27/02/2009, 10h40
  5. Nombre limite de formulaire par page html/php
    Par asmouma dans le forum Langage
    Réponses: 3
    Dernier message: 06/02/2007, 18h36

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