Salut a tous,

Tout d'abord je m'excuse si je publie ce sujet sur le mauvais forum.

je suis un utilisateur SAS de longue date et je bloque depuis quelques jours pour lire un fichier CSV de grande taille sur SAS sur Linux (je suis sous Fedora 30). La table de donnees du fichier CSV est de taille A1 a DRZ30098 (il y a en tout 3198 variables et 30098 lignes d'observations) que je peux telecharger entierement sur Windows mais pas sur Linux avec LibreOffice car dernier signale qu'il a atteint le maximum de colonnes d'affichage donc ne peut afficher le reste de la table (voir capture ecran).

Pour lire la table CSV sur SAS j'ai fais:

Code :Sélectionner tout -Visualiser dans une fenêtre à part
1
2
3
proc import datafile="/MyHome/MyFile.csv" DBMS=CSV out=BaselineData replace;
    getnames=yes;
run;


Voici un extrait affiche dans SAS log:

Code x :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
Number of names found is less than number of variables found.

71       data WORK.BASELINEDATA    ;
72       %let _EFIERR_ = 0; /* set the ERROR detection macro variable */
73       infile
73 ! '/DataWork1/MyData/data_projects/CLSA/ELCVData_1909008/1909008_McGillU_ERah
73 ! me_Baseline_DRU_JULY2020/1909008_McGillU_ERahme_CoP4_1_Baseline_DRU.csv'
73 ! delimiter = ',' MISSOVER DSD lrecl=32767
    74   firstobs=2 ;
.
.
.
    ;
9341      if _ERROR_ then call symputx('_EFIERR_',1);  /* set ERROR detection
19341! macro variable */
19342      run;

NOTE: The data set WORK.BASELINEDATA has 30155 observations and 3198 variables.


Pour résumer, SAS ne peut retenir tous les noms des variables contenues dans la table pour une raison que j'ignore et quand je fais un proc contents il renomme une partie des variables en une sequence de

VAR1784 a VAR3198, et en plus si je fais

Code :Sélectionner tout -Visualiser dans une fenêtre à part
%put &_EFIERR_;


J'obtiens un 0, ce qui suppose qu'il n'y a pas eu d'erreurs de lecture si je j'ai bien compris le sens de ce résultat.

Apres un échange avec SAS support, j'ai pu trouver un moyen pour renommer les VAR1784...VAR3198 par leurs noms originaux car je dispose de la liste des noms complets des variables de cette table qui se trouvent dans un fichier descriptif.

Le problème qui me reste à régler, si vous l'avez déjà remarqué, est pourquoi SAS note que 30155 observations ont été lues alors que dans la table CSV en dénombre 30098 lignes d'observations. Si j'affiche avec SAS les 10 dernières lignes pour 5 variables je trouve la même chose avec la table CSV, et ça m'intrigue car ça suppose qu'on est à la même ligne que ce soit dans SAS ou CSV.

Durant ma discussion avec les techniciens de SAS support, j'ai relevé ce problème et voila ce qu'ils m'ont répondu:

Have you been able to look at the hex representation to determine if the last rows are blank? You would need to use a tool on UNIX to look at the hex representation of the .CSV file. This is the best way to determine what is inside the .CSV file and if you have blank rows at the end.
Donc il me suggèrent d'utiliser le concept Hex representation pour valider la lecture de la CSV table.

Je ne sais pas si parmi vous ont été déjà confrontés à ce problème et comment l'ont résolus, ou si quelqu'un parmi vous peut me référer à cette méthode de Hex représentation.

Merci d'avance de votre aide.

PS: Je possede SAS 9.4