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 23/08/2011, 16h32   #1
Membre à l'essai
 
Inscription : février 2005
Messages : 61
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2005
Messages : 61
Points : 24
Points : 24
Par défaut Filtre liste d'arguments complets ou tronqués

Bonjour,

Je souhaite créer une requête qui m'extraie d'une table toutes les informations pour lesquelles un champ appartient à une liste prédéterminée. Cette liste pouvant contenir plusieurs enregistrements complets ou tronqués.

Création de ma liste :
Code :
1
2
3
4
5
6
7
DATA liste_facture;
LENGTH n_facture $11;
INPUT n_facture $;
cards;
201012
20110101001;
RUN;
Dans cet exemple je souhaite récupérer par exemple toutes mes factures de décembre 2010 et ma première facture du 01/01/2011. Sachant que cette liste et une variable de mon programme et pourrait contenir davantage de critères.

Voici le code pour ma liste :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
DATA liste_facture;
SET liste_facture;
IF length(compress(N_facture))<11 then
	N_facture=compress(N_facture||"%") ;
else
	N_facture=compress(N_facture);
RUN;
 
Proc SQL noprint;
SELECT Quote(N_facture) INTO : liste_facture separated BY ','
FROM N_facture;
quit;
%put liste_facture = &liste_facture;
Je souhaite ainsi extraire de maTable tous les champs dont le N_facture commence par les valeurs de ma liste. Il me faudrait un mélange de IN et de LIKE. Pour l'exemple j'ai pris des valeurs numériques mais mon véritable champs peut contenir des caractères alphanmumériques.

Si jamais vous avez des idées? Par avance merci.
aarlock est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 18h35   #2
Membre expérimenté
 
Inscription : avril 2009
Messages : 538
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 538
Points : 541
Points : 541
combien de lignes dans la table "liste_facture" et dans "N_facture" ?
xav2229 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 18h58   #3
Membre à l'essai
 
Inscription : février 2005
Messages : 61
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2005
Messages : 61
Points : 24
Points : 24
La table liste_facture pourra avoir un nombre de lignes variable, disons de 1 à 20. Pour l'instant, je construis cette liste à partir d'une proc data, mais à l'avenir il pourra s'agir d'un fichier texte ou autre. Cette liste sera à terme saisie par l'utilisateur.

N_Facture est un nom de champ. Il peut y avoir plusieurs lignes par N_Facture dans la table que je souhaite interroger in fine.

Ma difficulté est que l'utilisateur pourra choisir parmi plusieurs critères de filtre :
un/plusieurs N_Facture tronqués
un/plusieurs N_Facture complets
un/plusieurs N_Facture complets et tronqués

La table que j'interrogerai ne contient que des N_facture complets
aarlock est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 20h28   #4
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 823
Points : 2 823
Tu pourrais essayer l'opérateur IN: (avec les : ) qui signifie "commence par" et fonctionne comme un IN.
Ca ne fonctionne pas en SQL, mais dans tous les autres WHERE et IF.
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/08/2011, 11h36   #5
Membre expérimenté
 
Inscription : avril 2009
Messages : 538
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 538
Points : 541
Points : 541
Si tu n'as donc pas trop de lignes tu peux faire un produit cartesien avec un SQL et coder la jointure avec un OR :

(SI N_Facture complets) or (SI N_Facture tronqués)

pour coder le tronqué je te conseille la fonction index par exemple.
xav2229 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/08/2011, 12h01   #6
Membre à l'essai
 
Inscription : février 2005
Messages : 61
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2005
Messages : 61
Points : 24
Points : 24
Merci à tous les 2 pour vos réponses.

J'ai tenté la première proposition qui restait dans mes compétences, et ça fonctionne très bien, je ne connaissais pas cet opérateur. Il ne me reste plus qu'à transformer toutes mes PROC SQL en PROC DATA.
aarlock 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 16h44.


 
 
 
 
Partenaires

Hébergement Web