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 05/12/2011, 09h37   #1
Invité régulier
 
Inscription : mai 2004
Messages : 21
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 21
Points : 6
Points : 6
Par défaut [Mass update] Equivalent "for all update" ?

Bonjour à tous,

je cherche à faire un code qui met à jour 30 000 lignes dans une table T1 de 200 000 lignes via une seconde table T2.

Aujourd'hui j'ai fait un code qui :

- compte le nombre de lignes de T2
- X = 1
- boucle de X à nb_ligne_T2
- select la Xième ligne de T2 et met les valeurs dans des variables
- proc sql update sur T1
- X = X + 1

Malheureusement, cela prend beaucoup de temps (30 min). La requête d'update en elle même prend seulement 0,07 sec donc pas vraiment de soucis à ce niveau là mais ce sont les 30 000 occurences qui font durer le traitement.

Ma question : y a t'il une autre façon de faire en SAS ? Comme un "for all update" en SQL ou autre chose ?

Merci pour votre aide
Exca est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 10h09   #2
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 828
Points : 2 828
Bonjour.
En SAS (étape DATA) il y a une instruction UPDATE faite pour ce genre de choses.
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
DATA work.t1 (DROP=i) ;
  DO id=1 TO 200000 ;
    UPDATE="NO " ;
    ARRAY var [50] ;
    DO i=1 TO DIM(var) ;
	  var{i} = RAND("UNIFORM") ;
	END ;
	OUTPUT ;
  END ;
RUN ;
DATA work.t2 ;
  DO id=1 TO 200000 ;
    UPDATE="YES" ;
    ARRAY var [50] ;
    DO i=1 TO DIM(var) ;
	  var{i} = RAND("UNIFORM") ;
	END ;
	IF RAND("UNIFORM")<.15 THEN OUTPUT ;
  END ;
RUN ;
DATA work.t1_bis ;
  UPDATE work.t1 work.t2 ;
  BY id ;
RUN ;
Est-ce que ça correspond à ton besoin ?
Bon courage.
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h20.


 
 
 
 
Partenaires

Hébergement Web