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 07/03/2011, 15h27   #1
Nouveau Membre du Club
 
Inscription : avril 2008
Messages : 88
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 88
Points : 28
Points : 28
Par défaut Modifier de façon efficiente une observation contenue dans une table

Bonjour,

Connaissez-vous une façon de modifier de façon efficiente une observation contenue dans une table ?
(ex changer la valeur statut = "ok" en "ko" si var1="jaune" and var2="vert"
tropik972 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 15h32   #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 701
Points : 1 701
Citation:
Envoyé par tropik972 Voir le message
Je me disais aussi ..

Merci beaucoup

PS : Connaissez-vous une façon de modifier de façon efficiente une observation contenue dans une table ?
(ex changer la valeur statut = "ok" en "ko" si var1="jaune" and var2="vert"
t'as déjà donné une réponse à ta question, enfin presque

Code :
1
2
3
4
5
6
7
 
 
DATA tab1;
SET tab;
IF var1="jaune" AND var2="vert"
then statut="KO" ;
run;
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 15h35   #3
Nouveau Membre du Club
 
Inscription : avril 2008
Messages : 88
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 88
Points : 28
Points : 28
ouais je connaissais, mais je voulais savoir si il y avait une façon plus rapide, éviter l'étape data qui est lourde à faire tourner sur de grosses tables..

Merci beaucoup en tout cas !
tropik972 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 15h37   #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
Ou encore

Code :
1
2
3
4
5
data tab1;
set tab;
if var1="jaune" & var2="vert"
then statut="KO" ;
run;

MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 16h07   #5
Nouveau Membre du Club
 
Inscription : avril 2008
Messages : 88
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 88
Points : 28
Points : 28
lol ..
ok merci les gars !!
je peux clore la discussion

merci pour vos réponses
tropik972 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 16h08   #6
Nouveau Membre du Club
 
Inscription : avril 2008
Messages : 88
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 88
Points : 28
Points : 28
enfin mettre à résolu !!!

;-)
tropik972 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2011, 06h50   #7
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
Bonjour.
J'imagine (mais je n'ai pas testé) que les syntaxes MODIFY (étape DATA) et UPDATE (SQL) qui sont spécifiquement taillées pour ta question seront plus efficaces qu'un écrasement complet de la table.
Evidemment, c'est à tester pour vérifier que tu peux gagner du temps.
Code :
1
2
3
4
5
6
7
8
9
10
PROC COPY IN=sashelp OUT=work ;
  SELECT class ;
RUN ;
DATA work.class ;
  MODIFY work.class ;
  IF sex="F" AND age=15 THEN DO ;
    name="XXX" ;
	REPLACE ;
  END ;
RUN ;
Et en SQL...
Code :
1
2
3
4
5
6
7
PROC COPY IN=sashelp OUT=work ;
  SELECT class ;
RUN ;
PROC SQL ;
  UPDATE work.class
    SET name="XXX" WHERE sex="F" AND age=15 ;
QUIT ;
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2011, 10h33   #8
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
moui c'est pas flagrant

(extrait)


Code :
1
2
3
4
5
6
7
29         DATA work.test ;
30           MODIFY work.test ;
31           IF sex="F" AND age=15 THEN DO ;
32             name="XXX" ;
33         	REPLACE ;
34           END ;
35         RUN ;
NOTE: There were 19000 observations read from the data set WORK.TEST.
NOTE: The data set WORK.TEST has been updated. There were 2000 observations rewritten, 0 observations added and 0 observations
deleted.
NOTE: DATA statement used (Total process time):
Citation:
real time 0.05 seconds
cpu time 0.04 seconds

Code :
1
2
3
4
50         PROC SQL ;
51           UPDATE work.test
52             SET name="XXX" WHERE sex="F" AND age=15 ;
53         QUIT ;
NOTE: 2000 rows were updated in WORK.TEST.
NOTE: PROCEDURE SQL used (Total process time):
Citation:
real time 0.04 seconds
cpu time 0.03 seconds

Code :
1
2
3
4
70         DATA work.test ;
71           SET work.test ;
72           IF sex="F" AND age=15 THEN name="XXX" ;
73         RUN ;
NOTE: There were 19000 observations read from the data set WORK.TEST.
NOTE: The data set WORK.TEST has 19000 observations and 6 variables.
NOTE: DATA statement used (Total process time):
Citation:
real time 0.02 seconds
cpu time 0.02 seconds
__________________
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 08/03/2011, 10h51   #9
Membre Expert
 
Inscription : mars 2005
Messages : 1 010
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 010
Points : 1 258
Points : 1 258
Envoyer un message via Yahoo à bahraoui
Bonjour,

Tu peux créer un (des) index sur les variables qui sont utilisées dans les filtres ou les jointures.

Cordialement
Salah
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2011, 10h59   #10
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
Citation:
Envoyé par datametric Voir le message
moui c'est pas flagrant
Oui, c'est à vérifier sur les données de Tropik. Et éventuellement sur plusieurs runs du programme pour moyenner les influences extérieures (ressources I/O et CPU disponibles).
olivier.decourt 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 16h07.


 
 
 
 
Partenaires

Hébergement Web