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 :

Sommer ou soustraire des données à partir d'une date précise


Sujet :

SAS Base

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Ingénieur R&D
    Inscrit en
    Février 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Février 2019
    Messages : 9
    Points : 8
    Points
    8
    Par défaut Sommer ou soustraire des données à partir d'une date précise
    Bonjour,

    J'ai la table suivante :

    Nom : SQL.jpg
Affichages : 301
Taille : 189,1 Ko


    Je souhaite faire 2 choses :

    - je souhaite, pour chaque jour et par fiche, faire un cumul de la colonne "feed_lisse7j", toujours à partir du 1er jour (23/11/2018).
    Par exemple, pour le 26/11/2018, j'aurais la somme "feed_lisse7j" du 23/11/2018 + 24/11/2018 + 25/11/2018 + 26/11/2018 : soit 6756 au total.
    et ainsi de suite pour chaque jour.

    pour cela, j'ai mis le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      proc sql;
    	create table Feed_Cum as select distinct
    		t1.fiche,
    		t1.date,
    		t1.feed_lisse7j,
    		t1.age,
    		sum (t2.feed_lisse7j) as feed_cum
    	from feed_lisse2 t1
    		left join feed_lisse2 t2
    			on (t1.fiche = t2.fiche and t2.date between t1.first.date and t1.date)
    	group by 1,2,3;
    quit;
    --> mon problème est que je n'arrive pas à lui déclarer qu'il prenne toujours la 1ère date. il me met une erreur de syntaxe sur t1.first.date
    --> sinon, Est-ce que le code semble bon ?



    - 2ème point, toujours sur la même table, je souhaite, pour chaque jour et par fiche, faire une soustraction de la colonne "feed_lisse7j", toujours à partir du 1er jour (23/11/2018).
    Par exemple, pour le 26/11/2018, je veux faire la soustraction de "feed_lisse7j" : 26/11/2018 - 23/11/2018
    et ainsi de suite pour chaque jour.

    pour cela, j'ai mis le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      proc sql;
    	create table Feed_Cum as select distinct
    		t1.fiche,
    		t1.date,
    		t1.feed_lisse7j,
    		t1.age,
    		sum (t2.feed_lisse7j - t2.feed.lisse7j) as feed_cum
    	from feed_lisse2 t1
    		left join feed_lisse2 t2
    			on (t1.fiche = t2.fiche and t2.date between t1.first.date and t1.date)
    	group by 1,2,3;
    quit;
    --> je ne sais pas si le code est correcte pour faire une soustraction ?
    --> j'ai le même problème de syntaxe. je ne sais pas comment lui déclarer qu'il reparte toujours de la 1ère date ?


    Merci de votre aide !!

  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 Sommer ou soustraire des données par groupe
    Bonjour,

    Ça se fait très bien avec l'instruction retain dans une étape data :

    • Constitution de la table test (préférez une étape data à une copie d'écran, c'est plus facile pour tester...)

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    data test;
      input fiche datet :$10. feed age;
    cards;
    58	23/11/2018	1558	99
    58	24/11/2018	1733	100
    58	25/11/2018	1722	101
    58	26/11/2018	1743	102
    58	27/11/2018	1783	103
    58	28/11/2018	1872	104
    58	29/11/2018	1893	105
    58	30/11/2018	1922	106
    58	01/12/2018	2019	107
    59	23/11/2018	1628	99
    59	24/11/2018	1731	100
    59	25/11/2018	1854	101
    59	26/11/2018	1888	102
    59	27/11/2018	1887	103
    59	28/11/2018	1837	104
    59	29/11/2018	1828	105
    59	30/11/2018	1821	106
    59	01/12/2018	1801	107
    63	23/11/2018	1186	99
    63	24/11/2018	1304	100
    63	25/11/2018	1402	101
    63	26/11/2018	1509	102
    63	27/11/2018	1600	103
    63	28/11/2018	1854	104
    63	29/11/2018	1876	105
    63	30/11/2018	1949	106
    run;
     
    data test;
      set test;
      date=input(datet,ddmmyy10.);
      format date ddmmyy10.;
    run;
    • Somme cumulée par fiche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    data test;
      set test;
      by fiche;
      if first.fiche then feedsum=feed;
      else feedsum=feedsum+feed;
      retain feedsum;
    run;
    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
    25
    26
    27
    fiche          date    feed    feedsum
      58     23/11/2018    1558      1558
      58     24/11/2018    1733      3291
      58     25/11/2018    1722      5013
      58     26/11/2018    1743      6756
      58     27/11/2018    1783      8539
      58     28/11/2018    1872     10411
      58     29/11/2018    1893     12304
      58     30/11/2018    1922     14226
      58     01/12/2018    2019     16245
      59     23/11/2018    1628      1628
      59     24/11/2018    1731      3359
      59     25/11/2018    1854      5213
      59     26/11/2018    1888      7101
      59     27/11/2018    1887      8988
      59     28/11/2018    1837     10825
      59     29/11/2018    1828     12653
      59     30/11/2018    1821     14474
      59     01/12/2018    1801     16275
      63     23/11/2018    1186      1186
      63     24/11/2018    1304      2490
      63     25/11/2018    1402      3892
      63     26/11/2018    1509      5401
      63     27/11/2018    1600      7001
      63     28/11/2018    1854      8855
      63     29/11/2018    1876     10731
      63     30/11/2018    1949     12680
    • Soustraction de la première observation de la fiche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    data test;
      set test;
      by fiche;
      if first.fiche then feed0=feed;
      feedsub=feed-feed0;
      retain feed0;
    run;
    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
    25
    26
    27
    fiche          date    feed    feedsub
      58     23/11/2018    1558        0
      58     24/11/2018    1733      175
      58     25/11/2018    1722      164
      58     26/11/2018    1743      185
      58     27/11/2018    1783      225
      58     28/11/2018    1872      314
      58     29/11/2018    1893      335
      58     30/11/2018    1922      364
      58     01/12/2018    2019      461
      59     23/11/2018    1628        0
      59     24/11/2018    1731      103
      59     25/11/2018    1854      226
      59     26/11/2018    1888      260
      59     27/11/2018    1887      259
      59     28/11/2018    1837      209
      59     29/11/2018    1828      200
      59     30/11/2018    1821      193
      59     01/12/2018    1801      173
      63     23/11/2018    1186        0
      63     24/11/2018    1304      118
      63     25/11/2018    1402      216
      63     26/11/2018    1509      323
      63     27/11/2018    1600      414
      63     28/11/2018    1854      668
      63     29/11/2018    1876      690
      63     30/11/2018    1949      763
    Cordialement,

Discussions similaires

  1. reprise des données à partir d'une facture
    Par kitty2006 dans le forum SAP
    Réponses: 2
    Dernier message: 07/08/2008, 10h28
  2. [MySQL] afficher des données à partir d'une date selectionnée
    Par rane dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 21/11/2007, 15h21
  3. [VBA-E] extraire des données à partir d'une autre feuille
    Par zzman dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/01/2007, 13h26
  4. Réponses: 5
    Dernier message: 12/12/2006, 16h24
  5. [MySQL] Insérer des données à partir d'une db mysql dans un textarea
    Par minogttao dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/11/2006, 21h59

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