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 13/07/2011, 14h59   #1
Candidat au titre de Membre du Club
 
Homme
Étudiant
Inscription : mai 2011
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie

Informations forums :
Inscription : mai 2011
Messages : 17
Points : 10
Points : 10
Par défaut Correction des doublons

Bonjour,
J'ai une table qui contient des doublons. j'ai réussi a separer les doublons mais je souhaite corriger les doublons au lieu de les supprimer.

en entrée j'ai:

id auteur article
22 alex roi lion
23 alex roi lion
21 jim major
26 jim major
25 jim major

en sorti je veux avoir:

id auteur article
22 alex roi lion
22 alex roi lion
21 jim major
21 jim major
21 jim major


donc je veux avoir une correction sur le ID du deuxième doublons pour avoir un seul id pour chaque doublons.
merci d'avance
boudake est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 15h14   #2
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
tu dois créer une étape DATA dans laquelle tu testes si l'auteur de la ligne N est identique à celui de la ligne N-1 ((avec la fonction LAG). Dans ce cas, il faut récupérer l'id précédent (avec la fonction LAG) et l'appliquer à la ligne en cours.
__________________
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 00
Vieux 13/07/2011, 15h23   #3
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
Question de philosophie, je ne passerais pas par un LAG mais par des blocs d'observations. Si c'est la 1e ligne d'une série de doublons on stocke la valeur de l'ID (penser à la protéger par un RETAIN) et pour les autres lignes je me sers de la valeur stockée pour corriger.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
DATA work.doublons ;
  INPUT id auteur $ article & :$20. ;
DATALINES ;
22 alex roi lion
23 alex roi lion
21 jim major
26 jim major
25 jim major
;
RUN ;
PROC SORT DATA=work.doublons ;
  BY auteur article id ;
RUN ;
DATA work.doublons2 ;
  SET work.doublons ;
  BY auteur article ;
  RETAIN id_ok ;
  IF FIRST.article THEN id_ok=id ;
  ELSE id=id_ok ;
RUN ;
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/07/2011, 23h40   #4
Candidat au titre de Membre du Club
 
Homme
Étudiant
Inscription : mai 2011
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie

Informations forums :
Inscription : mai 2011
Messages : 17
Points : 10
Points : 10
Par défaut Correction des doublons

votre réponse m'a aidé dans mon programme mais il reste des cas qu'il ne gère pas. car quant j'ai deux doublons d'auteurs avec deux article différents
l'exemple: aakeer d et aakeer da est la même personne donc après correction on doit avoir un seul id pour le AAker DA et le AAkeer D.


AAKER DA 80487 BRAND EQUITY ADVERTI
AAKER D 164249 BRAND EQUITY ADVERTI
AAKER DA 80487 BRAND LEADERSHIP
AAKER D 164249 BRAND LEADERSHIP
AAKER DA 80487 BUILDING STRONG BRAN
AAKER D 164249 BUILDING STRONG BRAN
AAKER D 164249 MANAGING BRAND EQUIT
AAKER DA 80487 MANAGING BRAND EQUIT
AAKER D 164249 MARKETING RES
AAKER DA 80487 MARKETING RES
AAKER JL 40523 J CONSUM RES
AAKER J 207492 J CONSUM RES
AARON HJ 33083 BROOKINGS REV
AARON H 17749 BROOKINGS REV
AARONSON NK 53417 QUAL LIFE RES
boudake est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 10h45   #5
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
hello,
est ce que tu peux donner un exemple de tes données? avec les noms de colonnes bien sûre.
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 16h57   #6
Candidat au titre de Membre du Club
 
Homme
Étudiant
Inscription : mai 2011
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie

Informations forums :
Inscription : mai 2011
Messages : 17
Points : 10
Points : 10
Par défaut exemple de donnée

auteur id article
AAKER DA 80487 BRAND EQUITY ADVERTI
AAKER D 164249 BRAND EQUITY ADVERTI
AAKER DA 80487 BRAND LEADERSHIP
AAKER D 164249 BRAND LEADERSHIP
AAKER DA 80487 BUILDING STRONG BRAN
AAKER D 164249 BUILDING STRONG BRAN
AAKER D 164249 MANAGING BRAND EQUIT
AAKER DA 80487 MANAGING BRAND EQUIT
AAKER D 164249 MARKETING RES
AAKER DA 80487 MARKETING RES
AAKER JL 40523 J CONSUM RES
AAKER J 207492 J CONSUM RES
AARON HJ 33083 BROOKINGS REV
AARON H 17749 BROOKINGS REV
AARONSON NK 53417 QUAL LIFE RES
boudake est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2011, 14h37   #7
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
hello,
dans l'étape DATA j'ai ajusté un peu tes données pour éviter la lecture à longueurs variables qui pourra faire un utre sujet de discussion.

Olivier ta proposé un code qui marche parfaitement avec l'exemple de données que t'as proposé au début.
dans ton cas sa n'a pas marché parce que aakeer d et aakeer da sont différents.


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
 
 
DATA tab;
input 
auteur $ 1-11   id  13-19 article $ 20-39;
nom_auteur=scan(auteur,1,''); /* ici on récupère le nom , je suppose que DA D .. est le prénom de l'auteur*/
 
cards;
AAKER DA    80487  BRAND EQUITY ADVERTI
AAKER D     164249 BRAND EQUITY ADVERTI
AAKER DA    80487  BRAND LEADERSHIP
AAKER D     164249 BRAND LEADERSHIP
AAKER DA    80487  BUILDING STRONG BRAN
AAKER D     164249 BUILDING STRONG BRAN
AAKER D     164249 MANAGING BRAND EQUIT
AAKER DA    80487  MANAGING BRAND EQUIT
AAKER D     164249 MARKETING RES
AAKER DA    80487  MARKETING RES
AAKER JL    40523  J CONSUM RES
AAKER J     207492 J CONSUM RES
AARON HJ    33083  BROOKINGS REV
AARON H     17749  BROOKINGS REV
AARONSON NK 53417  QUAL LIFE RES 
;
run;
 
 
 
proc sort DATA= tab;
BY  nom_auteur id article;
run;
 
DATA work.doublons2 (DROP= nom_auteur id_ok) ;
  SET work.tab ;
  BY nom_auteur id ;
  RETAIN id_ok ;
  IF FIRST.nom_auteur  THEN id_ok=id ;
  ELSE id=id_ok ;
RUN ;
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2011, 20h29   #8
Candidat au titre de Membre du Club
 
Homme
Étudiant
Inscription : mai 2011
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie

Informations forums :
Inscription : mai 2011
Messages : 17
Points : 10
Points : 10
Par défaut doublons

deux auteurs représentent la même personne que quand il ont le même nom et quant ils ont écrit au moins un même article. donc ici Aaker DA et Aaker D sont la même personne. Mais Aaker JL et Aaker da ne sont pas la même personne. J'ai repris ton programme mais il fait Aaker Jl et Aaker DA comme meme personne. ce qui n'est pas le cas.
boudake est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 09h46   #9
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
Je ne sais pas si quelqu'un aura une solution miracle si tes données ne sont pas plus propres que ça. Je ne pense pas que SAS soit extra-lucide pour deviner que deux auteurs sont les mêmes ou pas alors qu'ils n'ont pas le même nom.
Cela dit, à partir de la proposition de SAM, tu peux extraire le nom de l'auteur. Et avec ce qu'on t'a déjà proposé, mettre le même nom+prénom à un auteur si le titre et le nom sont les mêmes : la manip (tri + SET BY + RETAIN) est la même que pour corriger tes identifiants.
A toi de jouer.
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 10h19   #10
Membre éclairé
 
Homme
statisticien
Inscription : mai 2011
Messages : 212
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : statisticien
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : mai 2011
Messages : 212
Points : 319
Points : 319
Citation:
Envoyé par boudake Voir le message
deux auteurs représentent la même personne que quand il ont le même nom et quant ils ont écrit au moins un même article. donc ici Aaker DA et Aaker D sont la même personne. Mais Aaker JL et Aaker da ne sont pas la même personne. J'ai repris ton programme mais il fait Aaker Jl et Aaker DA comme meme personne. ce qui n'est pas le cas.
Salut !

Tu aurais déjà du commencer par ceci, c'est à dire parce que tu entend par même auteur, comme le dit Olivier SAS n'est pas extralucide pas plus que les participants de ce forum.

Je pense que les conseils ci-dessus vont te permettre de répondre à ta problématique.

Par contre tu va avoir besoin d'une variable distincte "nom" et d'une variable distincte "prénom".

Si ce n'est pas le cas, et que tu as une variable unique pour le nom de l'auteur (soit prenom+nom ou nom+prenom et d'autres petites subtilités) et bien je te souhaite bon courage

Avec un peu de méthode tu pourras y arriver, d'autant qu'avec un peu d'inventivité la programmation de processus "d'apprentissage" permettant de cerner les différents cas est possible,
même si elle peut être parfois laborieuse.
SAS comporte en outre des fonctions d'évaluation de distance entre chaines de caractères qui peuvent se trouver fort utiles pour cet exercice et remédier aux inévitables fautes d'orthographe.

Une bonne connaissance de tes données te sera nécessaire.

Bon courage.
jerome_pdv2 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 00h07.


 
 
 
 
Partenaires

Hébergement Web