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 27/10/2011, 11h24   #1
Invité régulier
 
Inscription : juin 2011
Messages : 36
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 36
Points : 8
Points : 8
Par défaut Sélection d'une table sauf les éléments d'une sélection préalable

Bonjour,

J'ai une table A avec une clé sur 5 variables. J'ai créé une table B en sélectionnant certains enregistrements de cette table.

Je dois maintenant travailler sur une table C qui devrait contenir tous les éléments de A qui n'ont pas déjà été sélectionnés dans B.

En sql sous Access il y a un :

Code :
NOT IN SELECT (... FROM B)
mais je n'arrive pas à l'appliquer en proc sql sous SAS

Et puis je préférerais le faire en étape data (je ne sais pas trop comment gérer le where quand ma clef est sur plusieurs variables). J'imagine que c'est très simple.
Areis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2011, 12h03   #2
Membre habitué
 
Homme
Consultant informatique
Inscription : mars 2002
Messages : 211
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mars 2002
Messages : 211
Points : 133
Points : 133
Il y a plusieurs solutions possibles,

Si tu veux une étape data, tu peux créer autant de tables de sorties que tu as besoin.

D'après les explications que je peux lire, tu n'as pas besoin de faire de sort

Tu peux essayer quelque chose comme ceci:
Code :
1
2
3
4
5
6
7
8
 
DATA B C;
  SET A;
  IF (conditionB) then
    output B;
  IF (conditionC) then 
    output C;
run;
En Proc SQL tu devras utiliser un except
Code :
1
2
3
4
5
 
CREATE TABLE C AS
 SELECT * FROM A
   except
 SELECT * FROM B;
Ceci te donnera ce qui se trouve dans A et qui n'est pas dans B.
Si tu utilise le sql, jette aussi un oeil sur les modifiers ALL et CORR qui peuvent t'être utiles.
L0007 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/10/2011, 12h08   #3
Rédacteur
 
Homme Stéphane
Consultant et formateur SAS et Cognos
Inscription : avril 2009
Messages : 1 791
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Consultant et formateur SAS et Cognos
Secteur : Conseil

Informations forums :
Inscription : avril 2009
Messages : 1 791
Points : 4 012
Points : 4 012
en fait tu pourrais faire cela de plusieurs façons.

Dès le départ :

Code :
1
2
3
4
5
DATA B C;
SET A;
IF maclef IN (maselection) then OUTPUT B;
else OUTPUT C;
run;
Sinon, tu pourrais créer C depuis A et B avec un MERGE
Code :
1
2
3
4
5
DATA C;
Merge A (IN=ta) B(IN=tb);
IF ta AND NOT tb;
BY maclef1 maclef2 ;
run;
et enfin en SQL, il faudrait fusionner maclef1 et maclef2 pour créer un nouvel identifiant.

Code :
1
2
3
4
5
6
proc SQL;
SELECT a.* 
FROM A 
WHERE CATS(maclef1,maclef2) NOT IN (SELECT CATS(maclef1,maclef2) FROM B)
;
quit;
__________________
N'oubliez pas de cliquer sur lorsque votre problème est réglé !

Moteur de recherche dans les papiers SAS
datametric est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/10/2011, 08h56   #4
Invité régulier
 
Inscription : juin 2011
Messages : 36
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 36
Points : 8
Points : 8
Finalement avec la proc sql ça sera très bien Super, merci !
Areis 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 05h40.


 
 
 
 
Partenaires

Hébergement Web