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 :

Nombre de lignes mal interprété


Sujet :

SAS Base

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2012
    Messages : 36
    Points : 17
    Points
    17
    Par défaut Nombre de lignes mal interprété
    Bonjour à tous !

    Avez-vous déjà eu affaire à ce problème :
    J'ai une variable annsurv qui prend un nombre variable de valeurs distinctes suivant les données en entrée, généralement une dizaine. Par contre dans mes tables elle a plusieurs fois la même valeur (exemple il y a 3 lignes où elle vaut 2003, 5 lignes où elle vaut 2004 etc.)
    J'essaie de stocker les valeurs distinctes de annsurv dans des macro-variables pour pouvoir les réutiliser après.

    Du coup, afin de n'avoir que les valeurs disinctes, j'utilise une proc sql en précisant select distinct annsurv.

    La table en sortie de cette proc sql contient 10 lignes (les 10 valeurs distinctes de annsurv) pourtant dans la log SAS dit qu'elle n'en contient que 8 ! Et du coup lorsque j'enregistre ces valeurs dans des macro-variables à l'aide d'un call symputx mes deux dernières macro-variables sont vides !

    Je n'y comprends rien, avez-vous une idée ?

  2. #2
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Points : 3 403
    Points
    3 403
    Par défaut
    Hello,
    donens nous un jeu de données, ton programme et le résultat souhaité, on te donnera une réponse.
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  3. #3
    Membre expérimenté
    Homme Profil pro
    Attaché statisticien
    Inscrit en
    Mai 2011
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Attaché statisticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2011
    Messages : 687
    Points : 1 581
    Points
    1 581
    Par défaut
    Bonjour,

    les modalité que tu interprètes comme étant "vides" ne le sont peut-être pas (présence de caractères spéciaux non imprimés) ?

    Pour le vérifier tu peux par exemple transformer ta variable annsurv en une autre variable en valeur hexadécimale

    Hex_annsurv=put(annsurv,$hex10.);
    voir aussi ce programme comme illustration

    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 a;
    var='2003';output;
    var='2005';output;
    var='1E'x;output;
    var='A0'x;output;
    var='    ';output;
    run;
     
    data b; set a;
    h=put(var,$hex20.);
    run;
     
    proc print data=b;run;
     
    proc freq data=b; tables var;run;
    Enfin bon je suis peut-être à côté de plaque, mais c'est la première chose que je vérifierais en entendant parler que des valeurs vides sont distinctes...

    Après effectivement comme dit S A M les informations que tu nous donne sont un peu trop générales...

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2012
    Messages : 36
    Points : 17
    Points
    17
    Par défaut
    La table que j'ai est du style (appelons-là donnees) :
    annsurv
    2003
    2003
    2004
    2005
    2005
    2005
    2006
    2006
    2007
    2007
    2007
    2007

    Je fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    proc sql;
    create table variables_presentes as
    select distinct annsurv
    from donnees
    order by annsurv;
    quit;
     
    data contenu(keep=annsurv_car name);
    set variables_presentes;
    annsurv_car=put(annsurv,best9.);
    name=cats('ann_',annsurv_car);
    call symputx('var_'||compress(_N_),name);
    run;
    Ainsi, je souhaite que &var_1. vale ann_2003, &var_2. vale ann_2004 etc jusqu'à la fin.
    Le soucis c'est que SAS s'arrête avant la fin, la log dit que la table variables_presentes a seulement 4 lignes alors qu'elle en a 5, et du coup &var_5. n'a pas de valeur enregistrée...

  5. #5
    Membre expérimenté
    Homme Profil pro
    Attaché statisticien
    Inscrit en
    Mai 2011
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Attaché statisticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2011
    Messages : 687
    Points : 1 581
    Points
    1 581
    Par défaut
    Tu as les log correspondantes ? Si tu peux nous les montrer ce serait bien...

  6. #6
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Points : 3 403
    Points
    3 403
    Par défaut
    Commence déjà a corriger ton étape data par ce que je t'ai proposé ICI
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2012
    Messages : 36
    Points : 17
    Points
    17
    Par défaut
    J'ai corrigé l'étape data comme tu m'as dit, mais toujours le même problème...
    La log dit ceci :
    NOTE: There were 8 observations read from the data set WORK.ANNEES_A_CONSIDERER.
    NOTE: DATA statement used (Total process time):
    real time 0.00 seconds
    cpu time 0.00 seconds


    2003
    2004
    2005
    2006
    2007
    2008
    2009
    2010
    WARNING: Apparent symbolic reference ANN_9 not resolved.
    &ann_9.
    24 The SAS System 09:27 Thursday, October 25, 2012

    WARNING: Apparent symbolic reference ANN_10 not resolved.
    &ann_10.
    Il dit qu'il y a 8 observations alors qu'en réalité il y a bien 9 lignes !

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 114
    Points : 158
    Points
    158
    Par défaut
    Bonjour,

    Tu peux utiliser CALL SYMPUT en connectant directement tes deux variables pour créer tes macros variables à partir des valeurs de la premiere variable dans CALL SYMPUT.

    ==> Tri de la table pour obtenir les années en distinctes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    proc sort data=donnees out=sort_donnees nodupkeys;
    by annee;
    run;
    ==> Tu crées les deux variables qui vont s'utiliser dans call symput
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    data sort_donnees;
    set  sort_donnees;
    length name $10;
    name=strip(catx('_','ann',put(annee,4.)));
    mavar='var'||left(put(_n_,2.));
    run;
    ==> Enfin tu utilises CALL SYMPUT en connectant tes 2 variables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    data _null_;
    set  sort_donnees;
    call symput(mavar,name);
    run;
    &var_1 contient ann_2003, &var2 ann_2004 ....et &var_5=ann_200

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2012
    Messages : 36
    Points : 17
    Points
    17
    Par défaut
    Merci de ta réponse, mais en faisant comme ça j'ai toujours le même problème de la dernière macro-variable qui n'est pas remplie, puisque SAS croit qu'il n'y a que 8 lignes alors qu'il y en a 9 en réalité, donc même en enregistrant la macro-variable en même temps, il s'arrête de toute façon à la huitième ligne...

Discussions similaires

  1. retours à la ligne mal interprétés
    Par highman dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 01/06/2007, 16h53
  2. [SYBASE] nombre de ligne impactée par UPDATE
    Par metheorn dans le forum Sybase
    Réponses: 3
    Dernier message: 14/05/2004, 16h47
  3. determination le nombre de ligne d'une table
    Par picoti2 dans le forum Bases de données
    Réponses: 2
    Dernier message: 18/03/2004, 09h25
  4. Réponses: 2
    Dernier message: 02/03/2004, 19h38
  5. [TListView] Compter le nombre de lignes
    Par agh dans le forum Composants VCL
    Réponses: 2
    Dernier message: 30/09/2002, 20h25

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