Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > SAS Base
SAS Base Forum d'entraide sur SAS base : étape data, procédures non statistiques, procédures non graphiques, SQL
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 24/03/2011, 21h43   #1
Invité régulier
 
Astrid Genet
Inscription : novembre 2010
Messages : 43
Détails du profil
Informations personnelles :
Nom : Astrid Genet

Informations forums :
Inscription : novembre 2010
Messages : 43
Points : 7
Points : 7
Par défaut Extraction d'une liste de variables

Bonjour,

Je dispose d'une liste de parcelles (750) sélectionnées dans un fichier .txt. J'ai par ailleurs une base de données SAS contenant 35000 parcelles dont je voudrai extraire celles référencées dans le fichier .txt.

Quelqu'un aurait-il une idée? Je pensais éventuellement à une macro-variable avec une boucle for.

Merci!

Astrid
AstridG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 22h25   #2
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Salut Astrid,
Tu peux fusionner les deux tables en sélectionnant des données communes aux deux tables (si tu as des variables communes aux 2 bien sûr).
Si c'est pas le cas:

Code :
1
2
3
4
5
6
7
8
proc sql;
SELECT quote(var) INTO:liste separated BY '  ' FROM parcel_750;
quit;
 
DATA extrait750;
SET parcel_35000 ;
WHERE var IN (&liste.);
run;
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 22h42   #3
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
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 006
Points : 1 701
Points : 1 701
attention à la longueur de la macro variable :

site SAS
il y a aussi le merge (mais pas trop optimisé quand on a le choix d'éviter).
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 08h42   #4
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
+1 sam, la longueur d'une macro variable est limitée. Si la version sas qu'utilise Astrid est récente et la longueur des chaines de ses variables pas trop longue on peut supposer que la liste ne sera pas tronquée.

Une autre solution en passant par sql imbriqué:

Code :
1
2
3
4
5
6
7
proc sql;
CREATE TABLE newtable AS
SELECT DISTINCT * 
FROM base
WHERE var IN ( SELECT DISTINCT var FROM parcel_750)
;
quit;
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 09h15   #5
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Citation:
Envoyé par s_a_m Voir le message
attention à la longueur de la macro variable :

site SAS
il y a aussi le merge (mais pas trop optimisé quand on a le choix d'éviter).
C'est vrai que pour la longueur, j'ai pensé à ça une fois dans mon lit
La solution de Manoutz est mieux je pense.
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 09h15   #6
Membre Expert
 
Inscription : mars 2005
Messages : 1 010
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 010
Points : 1 258
Points : 1 258
Envoyer un message via Yahoo à bahraoui
Bonjour,

La meilleur solution c'est un merge ou une jointure; le "IN" peut être utilisé quand le nombre d'éléments dans la liste est faible.
Code :
WHERE var IN ( SELECT DISTINCT var FROM parcel_750)
J'ai déjà eu un problème avec le IN sous Oracle, le nombre d'élément dans la liste est limité => Oracle tronque la chaîne est génère des erreurs.

Cordialement
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 09h38   #7
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
apparemment il n'y a pas de connexion oracle ici (à ma connaissance, le problème ne se pose pas quand on reste sous sas).

mais la jointure classique est une autre possibilité, c'est clair.
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h05.


 
 
 
 
Partenaires

Hébergement Web