Chaque DATASET (tableau de données dans SAS) contient une partie métadonnée (PROC CONTENT) et une partie donnée (PROC PRINT). Le remplissage d'un DATASET se fait suivant différentes phases.
Phase de compilation :
Vérification de la syntaxe + Allocation mémoire définie par les métadonnées => On construit un dataset vide, si pas de place SAS s’arrête.
Le RUN indique à SAS que la phase de compile est terminée et qu’il peut exécuter
Phase d’exécution
Chaque ligne de la source des données est lue est ajoutée au dataset.
La variable _N_ est incrémentée, toutes les autre variables sont réinitialisée sauf si RETAIN.
Le contenu de input est mis dans un buffer puis copier dans le Program Data Vector (définit par les métadonnée). Une fois ceci fait on passe au datastep suivant. Il y a un datastep effectué par donnée à placer dans le dataset.
Importation
La première chose à faire lorsque l'on veut importer des données en SAS est en général de créer une bibliothèque (librairie) d'importation.
LIBNAME MALIB "c:\test"
Cette instruction est en général l'entête du fichier de code SAS. Le premier argument est le nom de la librairie, le second est la localisation physique sur le disque où les DATASET seront sauvés.
Cas simple:
Nous allons importer un simple fichier texte. Il faut savoir que par défaut SAS utilise l'espace comme séparateur de donnée et le CRLF comme séparateur d'enregistrement.
Voici donc le fichier testds.txt:
Nous avons deux champs et 3 enregistrement. Nous nommeront les champs VAL1 et VAL2. Le code pour importer ce fichier est le suivant:
LIBNAME MALIB "c:\temp\MALIB";
DATA MALIB.TESTDS ;
INFILE "c:\temp\malib\testds.txt";
INPUT VAL1 VAL2;
RUN;
Le fichier sera importer dans la bibliothèque MALIB et le dataset sera TESTDS
Il est bien sûr possible de compliquer les choses et d'importer des fichiers plus classiques comme les fichier csv ou tab delimited.
Considérons le fichier testds2.txt qui contient un enregistrement indiquant le nom des variables avec un 'tab' comme séparateur de champs:
Ici il faudra préciser à SAS le délimiteur et le fait que les observations commencent à la seconde ligne, pour cela on utilise deux options utiles dans le predicat INFILE qui sont DLM et FIRSTOBS.
LIBNAME MALIB "c:\temp\MALIB";
DATA MALIB.TESTDS2 ;
INFILE "c:\temp\malib\testds2.txt" DLM="09"x FIRSTOBS=2;
INPUT ID EVOLUTION;
RUN;
Remarquez que SAS utilise la convention "09"x pour spécifier un délimiteur de type tab. Remarquez aussi que contrairement à l'usage en cours chez les informaticiens, SAS commence à compter ses enregistrements à partir de 1 (et pas à partir de 0). La première observation valide est donc à la deuxième ligne...
Le résultat:
Aucun commentaire:
Enregistrer un commentaire