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

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Doctorant
    Inscrit en
    janvier 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Doctorant

    Informations forums :
    Inscription : janvier 2018
    Messages : 16
    Points : 9
    Points
    9
    Par défaut Calculer de nombreuses différences entre 2 temps de mesure
    Bonjour à tous,

    Je dispose d'une vingtaine de variables mesurées à deux temps différents.
    Dans une étape data j'avais commencé par calculer la différence de chacune de ces variables comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Data test;
    Diff_var1=Var1_Temps1-Var1_Temps2;
    Diff_var2=Var2_Temps1-Var2_Temps2;
    run;
    Mais je trouve que cela prend beaucoup de place dans le programme et cherche un moyen pour diminuer la taille du programme.
    En cherchant, je pensais passer par des array ou des macro-variables mais je ne connais pas trop ces "outils" de SAS, et ne sais donc pas si c'est possible.

    Auriez-vous une solution à mon problème ?

    Par avance, merci

    Florian

  2. #2
    Membre expérimenté
    Inscrit en
    novembre 2009
    Messages
    698
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 698
    Points : 1 300
    Points
    1 300
    Par défaut Boucle
    Bonjour,

    Une proposition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    %macro diff_var(nbvar);
      %do i=1 %to &nbvar;
        Diff_var&i = Var&i._Temps1-Var&i._Temps2;
      %end;
    %mend;
     
    data test;
      set test;
      %diff_var(20);
    run;
    Cordialement,

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Doctorant
    Inscrit en
    janvier 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Doctorant

    Informations forums :
    Inscription : janvier 2018
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup !

    Cordialement

  4. #4
    Membre du Club
    Femme Profil pro
    Formatrice en SAS (en ligne)
    Inscrit en
    mai 2019
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Formatrice en SAS (en ligne)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : mai 2019
    Messages : 28
    Points : 46
    Points
    46
    Par défaut
    Voici une autre approche possible : tu crées un dataset de référence qui te sert à générer ton programme.

    Les données

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    data test;
      var1_temp1=1;
      var1_temp2=2;
      var2_temp1=1;
      var2_temp2=2;
    run;
    Créer le dataset de référence

    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
    data ref (keep=main name);
        set sashelp.vcolumn (keep=libname memname name
                             where=(upcase(libname)='WORK' and upcase(memname)='TEST'));
        main='diff_' || scan(name,1,'_');
    run;
     
    data ref;
        merge ref (rename=(name=temp1) 
                   where=(upcase(temp1) like '%TEMP1'))
              ref (rename=(name=temp2) 
                   where=(upcase(temp2) like '%TEMP2'));
        by main;
    run;
     
    proc print data=ref noobs;
    run;

    Générer et exécuter le programme avec call execute


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    data _null_;
        set ref end=eof;
        if _n_=1 then
           do;
               call execute('data test;');
               call execute('set test;');
           end;
        call execute (main || '=' || temp1 || '-' || temp2 || ';');
        if eof then call execute ('run;');
    run;
    Générer et exécuter le programme avec put, filename, %include
    (utilise file print au lieu de file _tmp pour voir le code dans l'onglet Résultat de ton interface).

    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
    filename _tmp catalog 'work.demo.demo.source';
    data _null_;
        set ref end=eof;
        file _tmp;
        *file print;
        if _n_=1 then
           do;
               put 'data test;';
               put '    set test;';
           end;
        put   main '=' temp1 '-' temp2 ';';
        if eof then put 'run;';
    run;
    %include _tmp;
    filename _tmp;
     
    proc print data=test;
    run;
    Véronique

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/07/2012, 17h45
  2. Réponses: 0
    Dernier message: 11/04/2012, 14h36
  3. Calcul de la différence entre 2 images
    Par hanane78 dans le forum Images
    Réponses: 6
    Dernier message: 28/09/2007, 23h40
  4. [Dates] Calcul d'une différence entre deux heures
    Par loreleï85 dans le forum Langage
    Réponses: 12
    Dernier message: 28/06/2006, 11h43
  5. Réponses: 1
    Dernier message: 31/03/2006, 16h41

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