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/05/2011, 12h20   #1
Invité de passage
 
Homme
Inscription : mai 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mai 2011
Messages : 5
Points : 1
Points : 1
Par défaut supprimer des lignes dans une table SAS

Bonjour, je débute tout juste sous SAS, et je n'arrive pas à trouver comment supprimer certaines lignes dans une table SAS.
En fait, je voudrais supprimer les lignes d'une table pour lesquelles deux variables sont identiques à une autre table.
Exemple :

table 1
var_1 var_2 var_3
oui 12 15 ans ligne 1
oui 15 20 ans ligne 2
non 16 35 ans ligne 3


table 2
var_1bis var_2bis
oui 13
non 16
oui 17


Du coup, je voudrais garder uniquement les lignes 1 et 2 de la table 1.
Est-ce que c'est possible?

Merci d'avance.
yoyo44ima est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 12h33   #2
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 703
Points : 1 703
bonjour,
je ne voie pas bien la distinction ( debut et fin) des variables de la tables 1,
sinon tu fais une data merge. et une condition if var1( de table1) ne(var1!!var2) tables2;
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 12h36   #3
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
La suppression de lignes se fait par la commande delete.

Reste à bien coder les conditions de suppression. Il faut que tu rassemble tes deux jeux de données dans un seul par des clés de jointure, en précisant d'ou vient chaque données. Si une clé est présente dans les deux , alors on supprime la ligne. Dans l'idée c'est ca, il y aura peut être qq modfis a apporter (j'ai pas testé)

Code :
1
2
3
4
5
DATA supprlignes;
merge tab1(IN=A) tab2(IN=B RENAME=(var_1bis=var_1 var_2bis= var_2);
IF A;
IF A AND B then DELETE;
run;
ou encore mieux


Code :
1
2
3
4
DATA supprlignes;
merge tab1(IN=A) tab2(IN=B RENAME=(var_1bis=var_1 var_2bis= var_2);
IF A AND NOT B;
run;
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 12h48   #4
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 703
Points : 1 703
@manoutz, je crois qu'il faut qu'on rajoute un By la variable de comparaison.
car comme le merge in est te type booleen (0 ou 1) donc il va comparer toutes les variables?
et surtout une proc sort avant.
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 12h54   #5
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
oups! Effectivemment il faut ajouter un by. merci sam (et ca m'apprendra a pas tester!)

le by permet effectivement d'identifier les clés.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
DATA supprlignes;
merge tab1(IN=A) tab2(IN=B RENAME=(var_1bis=var_1 var_2bis= var_2);
IF A;
IF A AND B then DELETE;
BY var_1 var_2;
run;
 
DATA supprlignes;
merge tab1(IN=A) tab2(IN=B RENAME=(var_1bis=var_1 var_2bis= var_2);
IF A AND NOT B;
BY var_1 var_2;
run;
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 13h00   #6
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 703
Points : 1 703
alors, j'ai fais un jeu de données mais je ne suis pas si sûr que se soit le même que celui de yoyo44ima. Mais bon si tu débute en SAS alors inspire toi et révises tes cours. et si tu veux savoir plus sur le merge ( fusion virticale) il y a pas mal de PDF en Français.

inspires toi de ce petit programme, de débutant
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 
 
 
 
 
 
DATA table1;
input var_1 $ 1-6   var_2 $ 8-14  var_3 $ 15-22;
cards;
oui 12 15 ans ligne 1
oui 15 20 ans ligne 2
non 16 35 ans ligne 3
;
run;
 
 
DATA table2;
 
input var_1bis $ 1-6   ;
cards;
oui 13
non 16
oui 17
;
run;
 
 
proc sort DATA=table1; 
BY var_1;
run;
 
proc sort DATA=table2; 
BY var_1bis;
run;
 
 
DATA finale;
merge table1 (IN=a) table2 (IN=b RENAME=(var_1bis=var_1 ));
BY var_1;
IF a AND NOT b;
run;
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 13h05   #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
il faut merger (je pense si ma compréhension est bonne) par Var_1 var_2. Var_1 n'a que deux (ou peu de) catégories donc si on ne merge que sur cette variable ca va réduire considérablement le nombre de lignes.
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 09h39   #8
Invité de passage
 
Homme
Inscription : mai 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mai 2011
Messages : 5
Points : 1
Points : 1
Merci à tous les deux, vous m'avez été d'une grande aide.
J'ai utilisé ceci :

Code :
1
2
3
4
5
6
DATA supprlignes;
merge tab1(IN=A) tab2(IN=B RENAME=(var_1bis=var_1 var_2bis= var_2);
IF A;
IF A AND B then DELETE;
BY var_1 var_2;
run;
yoyo44ima 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 14h12.


 
 
 
 
Partenaires

Hébergement Web