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

[IML] Intégrale sous SAS


Sujet :

SAS IML

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut [IML] Intégrale sous SAS
    Bonjour à tous

    Je crois que j'ai besoin de votre aide !!!
    Je connais SAS depuis quelques temps mais j'utilise toujours les mêmes procédures basiques donc autant dire que je connais pas grand chose.

    je souhaiterai faire une intégrale entre 0 et x d'une fonction quelconque (disons f(t) =t pour faire simple).

    j'arrive à faire le calcul pour une valeur donnée avec ce programme :

    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
    %macro integrale( fun_t, B_inf, B_sup);
     
    proc iml;
     
      /* Definition de l'intégrale */ 
      start fonction(t); 
          v = &fun_t; 
          return(v); 
      finish; 
     
      /* Call QUAD */ 
      a   = { &B_inf  &B_sup }; 
      call quad(z,"fonction",a); 
      print z[format=E21.14];
     
    quit;
     
    %mend integrale;
     
    %integrale(t,0,1);
    mais mon problème c'est que j'aimerai faire ce calcul pour un grand nombre de valeur de x ; c'est à dire pour une variable x dans une table.

    c'est surement une question bête et je m'en excuse par avance mais je vous avoue que ça me débloquerait pas mal si quelqu'un avait une idée

  2. #2
    Responsable SAS


    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Points : 16 157
    Points
    16 157
    Par défaut
    Bonjour,
    Dans un premier temps ton problème est de récupérer les valeurs d'une table dans des marco-variables :
    Le programme ci-dessous va te montrer un moyen de résoudre ce premier problème:
    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
    DATA base;
    INPUT var1 var2;
    cards ;
    10 11
    15 22
    ;
    RUN;
    %MACRO test();
    DATA base2;
    SET base;
    CALL SYMPUT (COMPRESS("mavar"||left(put(_N_,4.))),var1);
    RUN;
    %MEND test;
    %test();
    %PUT &mavar1;
    Tu peux ensuite adapter ton problème avec quelque chose du style :
    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
    %macro integrale( fun_t, B_inf, nomMacro,nb);
    /*nb représente le nombre de valeurs de ta table*/
    /*nomMacro=mavar*/
    proc iml;
     
      /* Definition de l'intégrale */ 
      start fonction(t); 
          v = &fun_t; 
          return(v); 
      finish; 
    %do i=1 %to &nb;
     %let val=&&nomMacro&i;
      /* Call QUAD */ 
      a   = { &B_inf  &val }; 
      call quad(z,"fonction",a); 
      print z[format=E21.14];
    %end;
    quit;
    PS : j'ai pas du tout testé le dernier code

  3. #3
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    Bonjour,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    data _null_; data table;
    call execute('integrale(' ||fun_t||', '||B_inf||', ' ||B_sup||')';
    run;
    fun_t, b_inf et b_sup ce sont les noms des variables qui existe dans ta table.

    Cordialement.
    Salah

  4. #4
    Responsable SAS


    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Points : 16 157
    Points
    16 157
    Par défaut
    Bonjour,
    Si ton problème est résolu merci de cliquer sur
    Fafabzh

  5. #5
    Responsable SAS


    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Points : 16 157
    Points
    16 157
    Par défaut
    Message transféré:
    Citation Envoyé par helenei
    merci beaucoup pour ta réponse.
    par contre ça tombe en erreur et je ne trouve pas ce qui ne va pas. Peux tu m'aider?

    voilà ce que j'ai tapé :
    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
     
    DATA base;
    INPUT var1 var2;
    cards ;
    1 11
    10 22
    ;
    RUN;
     
    /*création de la macro variable*/
    %MACRO test();
    DATA base2;
    SET base;
    CALL SYMPUT (COMPRESS("mavar"||left(put(_N_,4.))),var1);
    RUN;
    %MEND test;
     
    %test();
    %PUT &mavar1;
     
    %macro integrale( fun_t, B_inf, nomMacro,nb);
    /*nb représente le nombre de valeurs de ta table*/
    /*nomMacro=mavar*/
    proc iml;
     
    /* Definition de l'intégrale */
    start fonction(t);
    v = &fun_t;
    RETURN(v);
    finish;
     
    %do i=1 %TO &nb;
    %let val=&&nomMacro&i;
    /* Call QUAD */
    a = { &B_inf &val };
    call quad(z,"fonction",a);
    print z[format=E21.14];
    %end;
     
    quit;
    %mend integrale;
     
    %integrale(t,0,var1,2);

Discussions similaires

  1. Techniques de debug sous SAS/IML
    Par enicnath dans le forum SAS IML
    Réponses: 3
    Dernier message: 12/12/2012, 11h17
  2. Calcul d'une intégrale sous SAS
    Par yemal dans le forum Macro
    Réponses: 7
    Dernier message: 18/07/2011, 21h42
  3. proc IML (langage matriciel sous sas)
    Par Abdeltif_esa dans le forum SAS IML
    Réponses: 0
    Dernier message: 20/11/2008, 23h57
  4. comment manipuler les OLAP sous SAS
    Par Bessa_bd dans le forum Outils BI
    Réponses: 5
    Dernier message: 28/01/2008, 17h44
  5. Intégrales sous LaTeX
    Par Invité dans le forum Mathématiques - Sciences
    Réponses: 2
    Dernier message: 25/01/2008, 17h22

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