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 variation sur 3 mois et 12 mois glissants


Sujet :

SAS Base

  1. #1
    Membre à l'essai
    Calcul variation sur 3 mois et 12 mois glissants
    Cher réseau,

    J'ai besoin de votre aide pour un problme qui me fatiqgue un depuis 1h.

    J'ai une table avec des montants cumulés par mois sur laquelle je souhaite calculer des variations mensuelles, sur 3 mois et sur 12 mois glissants.

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    data test;
      input id_clt $ annee_mois $ mois $ Montant $;
      cards;
    1 201801 1 459291,49
    1 201802 2 509454,27
    1 201803 3 509454,27
    1 201804 4 509454,27
    1 201805 5 509454,27
    1 201806 6 780035,75
    1 201807 7 780035,75
    1 201808 8 777029,17
    1 201809 9 770632,82
    1 201810 10 795594,76
    1 201811 11 791572,83
    1 201812 12 788973,34
    1 201901 1 785368,72
    1 201902 2 792321,81
    1 201903 3 792321,81
    1 201904 4 785715,40
    1 201905 5 785715,40
    1 201906 6 785715,40
    1 201907 7 777560,89
    1 201908 8 777560,89
    ;
    run;
     
    PROC SORT DATA=test; BY id_clt annee_mois; RUN;
     
    data test2; set test;
    BY id_clt annee_mois;
     
    var_mens = Montant  - lag(Montant);
    var_TRIM = Montant  - lag2(Montant );
     
    if mois =1  then var_ANN = 0;
    if mois =2  then var_ANN = var_mens;
    if mois =3  then var_ANN = var_TRIM;
    if mois =4  then var_ANN = Montant  - lag3(Montant );
    if mois =5  then var_ANN = Montant  - lag4(Montant );
    if mois =6  then var_ANN = Montant  - lag5(Montant );
    if mois =7  then var_ANN = Montant  - lag6(Montant );
    if mois =8  then var_ANN = Montant  - lag7(Montant );
    if mois =9  then var_ANN = Montant  - lag8(Montant );
    if mois =10 then var_ANN = Montant  - lag9(Montant );
    if mois =11 then var_ANN = Montant  - lag10(Montant );
    if mois =12 then var_ANN = Montant  - lag11(Montant );
     
    run;


    J'ai essayé ci-dessus mais apparemment la fonction lag ne marche dans une condition if.

    Merci beaucoup pour votre aide

  2. #2
    Membre expérimenté
    Bonjour, pourriez vous nous donner un exemple de données en sortie à partir de vos données en entrée ?

    Cordialement

  3. #3
    Membre à l'essai
    Bonjour, voici un exemple de sortie attendue :

    id_clt	annee_mois 	mois	Montant		      var_mens	  var_TRIM	 var_ANN
    20094	201801		1	459291,49	        .		  .		  .
    20094	201802		2	509454,27	        50162,78			  50162,78
    20094	201803		3	509454,27	        0		  50162,78  50162,78
    20094	201804		4	509454,27	        0		  0		  50162,78
    20094	201805		5	509454,27	        0		  0		  50162,78
    20094	201806		6	780035,75	        270581,48  270581,48 320744,26
    20094	201807		7	780035,75	        0		 270581,48 320744,26
    20094	201808		8	777029,17	        -3006,58	-3006,58	  317737,68
    20094	201809		9	770632,82	        -6396,35	-9402,93	  311341,33
    20094	201810		10	795594,76	         24961,94	 18565,59	  336303,27
    20094	201811		11	791572,83	         -4021,93	 20940,01	  332281,34
    20094	201812		12	788973,34	         -2599,49	-6621,42	  329681,85
    20094	201901		1	785368,72	         -3604,62	-3604,62	  .
    20094	201902		2	792321,81 	         6953,09	 3348,47	  6953,09
    20094	201903		3	792321,81	         0		 6953,09	  6953,09
    20094	201904		4	785715,40	         -6606,41	-6606,41	  346,68
    20094	201905		5	785715,40	         0		-6606,41	  346,68
    20094	201906		6	785715,40	         0		 0		  346,68
    20094	201907		7	777560,89  	        -8154,51	-8154,51	 -7807,83
    20094	201908		8	777560,89	         0		-8154,51	 -7807,83
    Cordialement

###raw>template_hook.ano_emploi###