IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SAS Base Discussion :

[Mass update] Equivalent "for all update" ?


Sujet :

SAS Base

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 21
    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

  2. #2
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Par défaut
    Bonjour.
    En SAS (étape DATA) il y a une instruction UPDATE faite pour ce genre de choses.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

Discussions similaires

  1. [2012] for xml, remplacement quote
    Par jord140 dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 28/05/2014, 11h53
  2. TRIGGER de type "for insert,update"
    Par samworld dans le forum Développement
    Réponses: 3
    Dernier message: 04/07/2007, 19h20
  3. [VB6>VB.NET] Comment coder "break on all errors"
    Par RiiiDD dans le forum VB.NET
    Réponses: 5
    Dernier message: 07/03/2006, 12h53
  4. boucle FOR et UPDATE
    Par nicerico dans le forum ASP
    Réponses: 14
    Dernier message: 20/08/2004, 11h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo