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 :

Calcul récursif par ligne


Sujet :

SAS Base

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Data Scientist
    Inscrit en
    Juin 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Data Scientist
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2017
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Calcul récursif par ligne
    Bonjour,

    je viens de rencontrer un problème plutôt étonnant dans SAS et je n'ai pas réussi à trouver d'explication.

    J'ai une base de donnée de cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    data test;
    input t x;
    datalines;
    1 2 
    2 5 
    3 8
    4 1
    5 2
    6 7
    ;
    run;
    Mon objectif est de calculer y(t+1)=x(t+1)/x(t). Je suis donc parti sur un code type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    data test;
    set test;
     lag_x=lag(x);
     if t^=1 then do;
      lagx=lag_x;
      y=x/lagx;
     end;
    run;
    Le code fonctionne bien, mais ne me remplit qu'une seule ligne à chaque exécution du dataset. Pour le moment je suis donc obligé de mettre ce bout de code dans une macro et faire tourner une boucle %do i=1 %to 6, ce qui est très peu élégant et surtout très long (j'ai en réalité 65 millions de lignes).

    Il est très compliqué d'utiliser des array car ma variable t n'est pas une clé de table, je dispose de plusieurs agrégat de données sur la même période de temps.

    D'après mes recherches, lors de la phase de compilation SAS identifie les valeurs manquantes et n'applique pas le calcul sur ces valeurs lors de la phase d’exécution.

    Si quelqu'un à un moyen efficace pour régler ce problème je suis preneur !

    Merci

  2. #2
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Calcul récursif par ligne
    Bonjour,

    Je ne suis pas sure de comprendre votre question. Votre programme semble fonctionner sans boucle :

    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
    data test;
      input t x;
      datalines;
      1 2
      2 5
      3 8
      4 1
      5 2
      6 7
      ;
    run;
     
    data test(drop=lag_x lagx);
      set test;
      lag_x=lag(x);
      if t^=1 then do;
        lagx=lag_x;
        y=x/lagx;
      end;
    run;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    t    x      y
    1    2     .
    2    5    2.500
    3    8    1.600
    4    1    0.125
    5    2    2.000
    6    7    3.500
    Vous pouvez simplifier le programme ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    data test;
      set test;
      y=x/lag(x);
    run;
    Cordialement,

Discussions similaires

  1. Calcul par ligne dans un formulaire
    Par plasch dans le forum IHM
    Réponses: 3
    Dernier message: 22/11/2011, 14h07
  2. [Toutes versions] requête de calcul par ligne
    Par damsmut dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 11/05/2010, 15h10
  3. [XL-2000] Calcul par ligne et non par page.
    Par j.cedric dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 05/01/2010, 17h29
  4. Calcul ligne par ligne sur le résultat d'une requête
    Par CanardJM dans le forum Langage SQL
    Réponses: 5
    Dernier message: 15/04/2008, 13h06
  5. [Access] Calcule par ligne dans une requête
    Par Belze dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/02/2006, 09h09

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