Annonce

Bienvenue sur le site support de mes ouvrages d'introduction à SAS

La 4ème édition de mon ouvrage est disponible depuis le 11 avril 2019 !

Où trouver cet ouvrage ?


#1 17-11-2020 09:45:29

SAS-SR
Administrateur
Lieu: Université d'Orléans
Date d'inscription: 01-09-2008
Site web

[archive] maudit fichier Excel !!!

encore une histoire tirée de faits réels...

de deux faits réels en fait...

Caroline m'a envoyé un fichier Excel avec lequel j'ai eu quelques difficultés et Ibrahima m'a contacté pour un problème qu'il rencontrait et qui avait aussi pour origine un fichier Excel.

Je vais concentrer les deux problèmes dans ce petit exercice...

Je dispose d'un classeur Excel avec lequel j'ai bien des misères....

ce fichier peut être téléchargé en cliquant sur ce lien

Comme je souhaite manipuler avec SAS les données contenues dans ce classeur, j'ai exécuté cette instruction :

Code:

libname test xlsx "c:/intro_sas/fichiers/maudit.xlsx";

évidemment, dans mon journal, tout semble bien aller :

Code:

2895  libname test xlsx "C:\intro_sas\fichiers\maudit.xlsx";
NOTE: Libref TEST was successfully assigned as follows:
      Engine:        XLSX
      Physical Name: C:\Users\leo_l\Documents\poubelle\maudit.xlsx

premier problème

Le premier onglet contient deux variables : email et type. Je souhaite afficher l'observation relative à l'email client_B@quinexistepas.com.
cette adresse email existe, aucun doute à ce sujet (vous pourrez vérifier en ouvrant le classeur Excel).

j'exécute donc le programme suivant :

Code:

proc print data=test.feuil1;
   where email="client_B@quinexistepas.com";
run;

et je n'obtiens aucun résultat.... dans mon journal, j'ai ce message :

Code:

NOTE: Access by observation number not available. Observation numbers will be counted by PROC PRINT.
NOTE: The import data set has 12 observations and 2 variables.
NOTE: No observations were selected from data set TEST.feuil1.
NOTE: There were 0 observations read from the data set TEST.feuil1.
      WHERE email='client_B@quinexistepas.com';
NOTE: PROCEDURE PRINT a utilisé (Durée totale du traitement) :
      real time           0.00 seconds
      cpu time            0.01 seconds

les deux premières notes ne doivent pas vous inquiéter, elles ne sont pas la cause de cette première difficulté...

vous ne me croyez pas ?

Code:

data maudit;
   set test.feuil1;
run;

proc print data=maudit;
   where email="client_B@quinexistepas.com";
run;

et vous n'aurez pas non plus de résultat.... pourtant, si vous remplacez = dans l'instruction WHERE par CONTAINS, vous obtenez bien un résultat...

Code:

proc print data=maudit;
   where email contains "client_B@quinexistepas.com";
run;

le résultat :
http://www.sas-sr.com/img/maudit.png

j'ai donc deux questions :
1- pourquoi ?
2- et comment corrige t'on le problème pour que le programme suivant fonctionne et donne le résultat escompté :


Code:

proc print data=maudit;
   where email="client_B@quinexistepas.com";
run;

second problème

pour des raisons qui n'appartiennent qu'à moi, j'ai besoin de créer un fichier TXT contenant les observations de la table maudite. J'ai donc rédigé ce programme (classique...) :

Code:

data _null_;
   set test.feuil1;
   file "C:\intro_sas\fichiers\maudit.txt";
   put email @30 type ;
run;

(j'ai indiqué un @30 dans mon instruction PUT parce que je souhaite créer un fichier TXT formaté colonne)

Mon journal m'indique que les choses semblent s'être bien passées :

Code:

2904  data _null_;
2905     set test.feuil1;
2906     file "C:\intro_sas\fichiers\maudit.txt";
2907     put email @30 type ;
2908  run;

NOTE: The file "C:\intro_sas\fichiers\maudit.txt" is:
      Nom du fichier=C:\intro_sas\fichiers\maudit.txt,
      RECFM=V,LRECL=32767,
      Taille de fichier (octets)=0,
      Modifié(e) le=17 novembre 2020 10 h 06,
      Heure de création=17 novembre 2020 10 h 06

NOTE: The import data set has 12 observations and 2 variables.
NOTE: 12 records were written to the file "C:\intro_sas\fichiers\maudit.txt".
      The minimum record length was 30.
      The maximum record length was 42.
NOTE: There were 12 observations read from the data set TEST.feuil1.
NOTE: DATA statement a utilisé (Durée totale du traitement) :
      real time           0.02 seconds
      cpu time            0.00 seconds

et j'ouvre mon fichier TXT pour vérifier qu'effectivement, tout va bien :

Code:

client_A@quinexistepas.com   super
client
client_B@quinexistepas.com   client
moyen
client_C@quinexistepas.com   client
bon
client_D@quinexistepas.com   super
client
client_E@quinexistepas.com   client
moyen
client_F@quinexistepas.com   client
bon
client_G@quinexistepas.com   super
client
client_H@quinexistepas.com   client
moyen
client_I@quinexistepas.com   client
bon
client_J@quinexistepas.com   super
client
client_K@quinexistepas.com   client
moyen

fatalitas !

et j'ai deux nouvelles questions (identiques en fait aux deux précédentes...):
1- pourquoi ?
2- et comment corrige t'on je problème pour que mon programme fonctionne et donne le résultat escompté : un fichier TXT dans lequel chaque observation n'est présentée que sur une ligne


amusez vous bien

Ce sujet est maintenant archivé - seuls les utilisateurs inscrits de www.sas-sr.com peuvent consulter l'intégralité du sujet et les réponses aux questions posées.
pour vous identifier, suivez ce lien
pour vous inscrire, suivez ce lien

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB
Traduction par FluxBB.fr
Flux RSS