Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > Débutez
Débutez Forum concentrant les premières questions que l'on se pose en tant que débutant
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/08/2011, 13h44   #1
Invité de passage
 
Homme
Statisticien
Inscription : août 2011
Messages : 11
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Statisticien
Secteur : Distribution

Informations forums :
Inscription : août 2011
Messages : 11
Points : 1
Points : 1
Par défaut Récupérer les 100 premières lignes d'un gros fichier

Bonjour à tous,

Je suis un nouvel utilisateur de SAS Unix 9.2 (d'avance désolé pour mes questions bêtes), je souhaiterais récupérer les 100 premières lignes d'un gros fichier.

J'ai essayé ceci :

Code :
1
2
3
4
5
filename monfichier='/saswrk/tata/toto.csv';
 
DATA sasuser.extract_monfichier;
INFILE monfichier firstobs=100;
Run;
Mais ça ne fonctionne pas
No logical assign for filename MONFICHIER
Vous sauriez d'où vient le problème SVP ?
Merci par avance
milad92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 14h11   #2
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 145
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 145
Points : 1 763
Points : 1 763
tu es sur de ton chemin d'acces?
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 14h20   #3
Invité de passage
 
Homme
Statisticien
Inscription : août 2011
Messages : 11
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Statisticien
Secteur : Distribution

Informations forums :
Inscription : août 2011
Messages : 11
Points : 1
Points : 1
Par défaut chemin d'accès infile

Citation:
Envoyé par Manoutz Voir le message
tu es sur de ton chemin d'acces?
en effet je pense que le problème vient du chemin d'accès mais j'ai vérifié et c'est bien ça pourtant ...

message d'erreur : Error in the FILENAME statement.
milad92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 14h24   #4
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 009
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

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

Informations forums :
Inscription : février 2011
Messages : 1 009
Points : 1 709
Points : 1 709
et non pas
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 14h25   #5
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 009
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

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

Informations forums :
Inscription : février 2011
Messages : 1 009
Points : 1 709
Points : 1 709
Code :
1
2
3
4
5
6
7
 
 
filename monfichier '/saswrk/tata/toto.csv';
 
DATA sasuser.extract_monfichier;
INFILE monfichier firstobs=1 obs=100;
Run;
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 14h26   #6
Membre du Club
 
Homme Fabien
Inscription : novembre 2008
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Localisation : France

Informations forums :
Inscription : novembre 2008
Messages : 59
Points : 56
Points : 56
Bonjour,

Au hasard, essai comme ceci :

'\\saswrk\tata\toto.csv'

Sinon pour ne travailler que sur 100 lignes tu as l'option.

Cordialement
suistrop est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 14h51   #7
Invité de passage
 
Homme
Statisticien
Inscription : août 2011
Messages : 11
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Statisticien
Secteur : Distribution

Informations forums :
Inscription : août 2011
Messages : 11
Points : 1
Points : 1
Merci pour votre réactivité !

ça fonctionne presque !

Il fallait supprimer le "=" après "filename mon_fichier"

Le souci maintenant c'est que mon fichier est vide

J'ai essayé :
firstobs=100;

firstobs=1 obs=100;
milad92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 15h28   #8
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 828
Points : 2 828
Il manque à ton programme une instruction INPUT (après INFILE) pour décrire une ligne type de ton fichier.
Je proposerais sinon :
Code :
1
2
3
4
5
6
7
OPTION OBS=100 ;
PROC IMPORT DATAFILE='/saswrk/tata/toto.csv' 
                     OUT=sasuser.extract_monfichier
                   DBMS=DLM REPLACE ;
  DELIMITER=";" ;
RUN ;
OPTION OBS=MAX ;
à la place de tout ton code actuel (FILENAME + étape DATA). Les 2 instructions OPTION permettent de limiter temporairement le nombre de lignes écrites dans une table, et d'annuler ensuite cette limitation.
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 15h35   #9
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 009
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

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

Informations forums :
Inscription : février 2011
Messages : 1 009
Points : 1 709
Points : 1 709
Citation:
Envoyé par olivier.decourt Voir le message
Il manque à ton programme une instruction INPUT (après INFILE) pour décrire une ligne type de ton fichier.
Je proposerais sinon :
Code :
1
2
3
4
5
6
7
OPTION OBS=100 ;
PROC IMPORT DATAFILE='/saswrk/tata/toto.csv' 
                     OUT=sasuser.extract_monfichier
                   DBMS=DLM REPLACE ;
  DELIMITER=";" ;
RUN ;
OPTION OBS=MAX ;
à la place de tout ton code actuel (FILENAME + étape DATA). Les 2 instructions OPTION permettent de limiter temporairement le nombre de lignes écrites dans une table, et d'annuler ensuite cette limitation.
ah oui l'INFILE .
attention au noms de colonnes.
si la première ligne de ton tichier CSV ne correspond pas aux noms des colonnes ( c à d les lignes données commencent à partir de la ligne N°1)
il faut rajouter à la PROC IMPORT un GETNAMES=NO;
Sinon Olivier si on met juste le BDMS=CSV sa marchera aussi non?
Code :
1
2
3
4
5
6
7
8
OPTION OBS=100 ;
PROC IMPORT DATAFILE='/saswrk/tata/toto.csv' 
                     OUT=sasuser.extract_monfichier
                   DBMS=CSV REPLACE ;
                   GETNAMES=NO;
 
RUN ;
OPTION OBS=MAX ;
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 16h21   #10
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 828
Points : 2 828
Citation:
si on met juste le DBMS=CSV ça marchera aussi non?
Tout dépend du logiciel qui a produit le CSV. Pour SAS, CSV=séparateur virgule (ce qui est la définition historique du CSV, comme son nom l'indique). Pour Excel en français, un CSV a un séparateur point-virgule puisque la virgule sert déjà de séparateur décimal.
Dans le doute, je préfère utiliser DBMS=DLM et indiquer ensuite clairement le séparateur avec l'instruction DELIMITER : au moins, celui qui reprend le programme derrière voit clairement où agir si le séparateur change dans le futur.
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 16h26   #11
Invité de passage
 
Homme
Statisticien
Inscription : août 2011
Messages : 11
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Statisticien
Secteur : Distribution

Informations forums :
Inscription : août 2011
Messages : 11
Points : 1
Points : 1
Citation:
Envoyé par olivier.decourt Voir le message
Il manque à ton programme une instruction INPUT (après INFILE) pour décrire une ligne type de ton fichier.
Je proposerais sinon :
Code :
1
2
3
4
5
6
7
OPTION OBS=100 ;
PROC IMPORT DATAFILE='/saswrk/tata/toto.csv' 
                     OUT=sasuser.extract_monfichier
                   DBMS=DLM REPLACE ;
  DELIMITER=";" ;
RUN ;
OPTION OBS=MAX ;
à la place de tout ton code actuel (FILENAME + étape DATA). Les 2 instructions OPTION permettent de limiter temporairement le nombre de lignes écrites dans une table, et d'annuler ensuite cette limitation.
Super ! ça fonctionne merci !
En effet il manquait également l'instruction INPUT
milad92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 13h56   #12
Invité de passage
 
Homme
Statisticien
Inscription : août 2011
Messages : 11
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Statisticien
Secteur : Distribution

Informations forums :
Inscription : août 2011
Messages : 11
Points : 1
Points : 1
Par défaut extraire 100 premières lignes d'un dataset dans WORK

Savez-vous comment faire pour effectuer cette même extraction mais cette fois-ci à partir d'un dataset se trouvant dans la librairie WORK ?
En vous remerciant !
milad92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 14h12   #13
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 009
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

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

Informations forums :
Inscription : février 2011
Messages : 1 009
Points : 1 709
Points : 1 709
Code :
1
2
3
4
 
DATA test;
SET sashelp.class (firstobs=5 obs=14);
run;
tu rajoutes les parenthèses.
si tu veux extraire NBR de ligne à partir de la ligne numéro N
la règle est:
OBS=NBR +N-1.
dans l'exemple c'est :
OBS=10 +5-1.
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 14h30   #14
Invité de passage
 
Homme
Statisticien
Inscription : août 2011
Messages : 11
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Statisticien
Secteur : Distribution

Informations forums :
Inscription : août 2011
Messages : 11
Points : 1
Points : 1
Citation:
Envoyé par s_a_m Voir le message
Code :
1
2
3
4
 
DATA test;
SET sashelp.class (firstobs=5 obs=14);
run;
tu rajoutes les parenthèses.
si tu veux extraire NBR de ligne à partir de la ligne numéro N
la règle est:
OBS=NBR +N-1.
dans l'exemple c'est :
OBS=10 +5-1.
Super ça fonctionne ! merci beaucoup sam !
milad92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h40.


 
 
 
 
Partenaires

Hébergement Web