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 STAT Discussion :

Résolution d'une équation


Sujet :

SAS STAT

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 11
    Points : 5
    Points
    5
    Par défaut Résolution d'une équation
    Bonjour,

    Étant nouveau sous SAS je pose ce message là:

    Après quelques recherches je n'ai pas trouvé de solutions donc voilà mon problème:
    je souhaite résoudre une équation du type:

    A = ∑ Bk/(1+tk+Z)^Ck , k appartenant à [1;n]


    Sachant que je connais A, mes différents Bk; tk et Ck (présent dans une table).

    Je cherche donc Z.

    En vous remerciant par avance du temps que vous prendrez pour me répondre

  2. #2
    Membre régulier
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2017
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Novembre 2017
    Messages : 63
    Points : 82
    Points
    82
    Par défaut
    Votre problème est-il d'extraire Z de votre équation ou bien avez-vous déjà une forme du genre "Z = ...." et vous cherchez comment la mettre en oeuvre sous SAS?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Bonjour Monsieur,

    Je n'ai pas de formule exacte pour calculer Z,
    Z peut être évaluer en faisant varier Z (par dichotomie) afin de trouver l’égalité voulu.

    Mais cela risque d'être un peu long comme process et il faudrait que je code cette partie (je suis en train de me pencher sur cette réalisation afin de voir si c'est réalisable et fiable mais je me demandais si ce genre de résolution n'était pas déjà dans SAS (on le trouve dans EXCEL avec la fonction Analyse de scénario: valeur cible)).

    Merci du temps que vous prendrez à me répondre.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 210
    Points : 147
    Points
    147
    Par défaut
    Bonjour,

    Il n'y a pas de système automatique analogue à ce qui existe dans Excel pour faire ce type de traitement, dans SAS.
    Il faut donc programmer soi-même ses itérations. Cela suppose une étude mathématique préalable afin de connaître le comportement de la fonction.
    Je propose ici un premier élément de solution (j'ai pris N= 2 et j'ai calculé A sur Excel). Comme, ici, je n'ai pas fait d'étude de la fonction, je me contente, à chaque itération, d'incrémenter Z d'une unité (normalement, on ferait plutôt une étude dichotomique). Je demande une précision de 10-5 sur A ... et, pour prévoir les cas de non-convergence et éviter les boucles infinies, je fixe un nombre maximal d'itérations

    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
     
    data t;
    	n=2;
    	b1=1;b2=2;
    	t1=5;t2=6;	
    	c1=3;c2=4;
    	array b(2) b1-b2;
    	array t(2) t1-t2;
    	array c(2) c1-c2;
    	A_cible =	0.00157174211248285 ;
     
    	/* pour ces données, on doit obtenir Z = 3 */
    	epsilon = 1E-5; /* écart max par rapport à la cible */
     
    	z=1 ;
    	arret=0;
    	nb_iterations=0;
    	nb_iterations_max=1000; /* pour éviter une boucle infinie ! */
    	do while(not(arret));
    		A=0;
    		nb_iterations=nb_iterations+1;
    		do k = 1 to N; 	
    			A = A + b(k)/(1+t(k)+Z)**C(k); 
    		end;
    		erreur= abs(A-A_cible) ;
     
    		if erreur < epsilon or nb_iterations > nb_iterations_max then do;
    			Z_final = Z ; arret = 1;				
    		end;
    		else do;
    			z = z +1 ;
    		end;		
    	end;
    run;
    proc print data = t;run;
    Ne pas hésiter si questions !

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Bonjour Monsieur,


    Je vous remercie de votre retour et de ce code qui m'a bien aidé.

    J'ai fait tourner votre code et cela marche mais me prends 90000000 d'itérations afin d'avoir un résultat correct pour un de mes cas.
    En effet je veux: A à 0.01 près mais du coup mon Z doit varier de manière beaucoup plus fine afin de trouver un résultat car sinon Epsilon ne rentre pas dans l'intervalle pour lequel z est considéré comme correct: il passe directement d'inférieur à 0.01 à supérieur à 0.01 (ou inversement) sans avoir trouvé le z correspondant et celui-ci continue donc de s'incrémenter sans jamais trouver de résultat).

    Et ayant un grand nombre de Z à calculer je vais donc me pencher sur une dichotomie (afin de gagner du temps) avec plusieurs cas car mon epsilon peut être positif ou négatif au début des itération mais je sais que z est généralement compris entre -2 et 2 (sauf quelques cas),

    Je vous remercie de votre retour et de ce code qui m'a bien aidé.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 11
    Points : 5
    Points
    5
    Par défaut Données d'entrée
    Bonjour,

    Voulant automatiser ce processus sur un grand nombre de Z à calculer j'ai un problème avec mes données d'entrée (b(k), t(k), c(k)):

    J'ai deux tableaux:

    tab1 id c b t
    g1 8.1 187.50 0.57
    g1 7.1 257.5 -0.02
    g1 6.1 82.50 0.29
    g1 5.1 750 0.15
    g1 4.1 50 0.01
    g1 3.1 1750 -0.01
    g1 2.1 150 0.43
    g1 1.1 18750 -0.03
    h2 0.6 25 2
    h2 1.1 25 2
    h2 1.7 25 2.5


    tab2 a
    g1 22000
    g2 70


    et je n'arrive donc pas à récupérer ces valeurs pour faire tourner votre petit programme. Ni à transposer mon tableau tab1 afin d'avoir une ligne par id et un nombre n de c, b et t sur cette même ligne, (j'arrive cependant à avoir 3 lignes pour un même id (c, b et t).

    Auriez-vous des pistes pour m'aider?

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    J'avais quelques pistes mais étant débutant sous sas je n'y arrive pas du tout!
    Quelqu'un aurait-il une idée pour me débloquer svp?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Résolution d'une équation trigonométrique
    Par tlemcenvisit dans le forum Algorithmes et structures de données
    Réponses: 21
    Dernier message: 20/08/2009, 17h47
  2. Résolution d'une équation
    Par johnvox dans le forum Delphi
    Réponses: 6
    Dernier message: 13/02/2007, 10h04
  3. Résolution d'une équation différentielle
    Par ramrouma dans le forum MATLAB
    Réponses: 1
    Dernier message: 12/02/2007, 14h11
  4. Réponses: 1
    Dernier message: 08/12/2006, 17h13
  5. Résolution d'une équation par Gauss
    Par rahmani01 dans le forum MATLAB
    Réponses: 3
    Dernier message: 03/11/2006, 22h15

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