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 22/06/2011, 22h59   #1
Invité
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Par défaut Utilisation de lag pour supprimer des lignes

Bonjour,
j'ai une table qui se présente comme ceci :
Code :
1
2
3
4
5
6
7
8
9
10
11
 
aaaa\
adft\
fic1.txt
fic2.txt
adft\
fic.txt
fic2.txt
aoiut\
aiut\
aurt\
j'aimerai avoir le résultat suivant:
Code :
1
2
3
4
5
6
7
8
 
 
adft\
fic1.txt
fic2.txt
adft\
fic.txt
fic2.txt
j'ai essayé avec lag mais sa n'a pas marché
l'idée c'est si deux valeurs qui contiennent un \ se succèdent d'éliminer la première.

Merci de votre aide.
Julie.
  Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 09h42   #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
Bonjour Julia,
Il suffit d'isoler les lignes contenant un \, supprimer les doublons puis concatener avec ceux qui ne contiennent pas un \

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
DATA test;
input var_$;
cards;
aaaa\
adft\
fic1.txt
fic2.txt
adft\
fic.txt
fic2.txt
aoiut\
aiut\
aurt\
;
run;
 
DATA test2 test;
SET test;
IF INDEX(var_,'\') then output test2;
else output test;
run;
 
proc sort data=test2 nodupkey;
by var_;
run;
 
data test;
set test test2;
run;
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 10h19   #3
Invité
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Merci pour la réponse, Mais ce n'est pas ce que je recherche;

pas de trie ,car il faut garder la structure du fichier.
les enregistrements avec des / correspondent aux répertoires, les autres à leurs contenue, donc le but c'est d'éliminer tous les répertoires qui ne contiennent pas de fichiers textes.d'où je suis obligée de garder la structure du fichier.
  Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 10h39   #4
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
Je n'ai pas trop compris le passage de la table une à la deux
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 10h50   #5
Membre du Club
 
Inscription : janvier 2009
Messages : 98
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 98
Points : 66
Points : 66
Il suffit de créer une variable qui te permettra de retrier dans le bonne ordre. car supprimer une ligne précédente en sas ce n'est pas très facile sinon.

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
 
DATA test;
input var_$;
cards;
aaaa\
adft\
fic1.txt
fic2.txt
adft\
fic.txt
fic2.txt
aoiut\
aiut\
aurt\
;
run;
 
DATA test;
   SET test;
   numero = _n_;
run;
 
proc sort DATA = test; BY descending numero ; run;
 
 
 DATA test2;
    SET test;
    retain var2 0;
    IF (INDEX(var_, '\') > 0 and var2 = 0) or index(var_, '\') = 0 then output ;
    if index(var_, '\') > 0 then var2 = 1 ;
    else var2 = 0;
run;
 
proc sort data = test2; by numero ; run;
lhonolulu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 10h54   #6
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
Bonjour,

je te propose ce code avec deux proc sort et un lag

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
 
DATA test; SET test;ordre=_N_;run;
proc sort DATA=test; BY descending ordre;run;
 
DATA test; SET test;
i_txt=lag(substr(var_,length(var_)-3,4)='.txt');
run;
 
proc sort DATA=test; BY ordre;run;
 
DATA test; SET test; 
IF substr(var_,length(var_),1)='\' and (i_txt=0 or i_txt=.) then delete;
drop i_txt ordre;run;
jerome_pdv2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 11h26   #7
Membre confirmé
 
Inscription : janvier 2010
Messages : 185
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 185
Points : 250
Points : 250
bonjour,

un début de réponse
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
DATA test;
input valeur $ ;
cards;
aaaa\
adft\
fic1.txt
fic2.txt
adft\
fic.txt
fic2.txt
aoiut\
aiut\
aurt\
;
run;
 
 
DATA test2;
merge test test (firstobs=2 RENAME=(valeur=valeur_suivante));
IF reverse(strip(valeur))=:"\" and reverse(strip(valeur_suivante))=:"\" then delete;
/*drop valeur_suivante;*/
run;
L'idée est d'accoler la table avec elle-même mais décalée de 1 ligne (firstobs=2).

Comment gères-tu les cas où plus de 2 valeurs XXX\ se suivent ?
sasadm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 15h25   #8
Invité
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Merci à tous de vos réponses.

Et oui SASADM en réalité mon seul soucisc’était comment gérer les deux valeurs (répertoires) qui se suivent succèdent
  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 05h48.


 
 
 
 
Partenaires

Hébergement Web