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 :

Proc mixed en boucle


Sujet :

SAS STAT

  1. #1
    Membre à l'essai
    Femme Profil pro
    Ingénieur
    Inscrit en
    Novembre 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Novembre 2015
    Messages : 9
    Points : 14
    Points
    14
    Par défaut Proc mixed en boucle
    Bonjour,

    je suis nouvelle sous SAS, j'ai déjà parcouru une bonne partie du forum sans réellement trouver de réponse à mon problème.

    Je réalise des proc mixed sur x variables (x = 132 pour l'instant ... et c'est amené à augmenter encore).
    Mon script est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    proc mixed data=bddmoy;
    class vache trte trtn;
    model mavariable = trte trtn trte*trtn;
    random vache;
    lsmeans trte trtn trte*trtn/pdiff;
    run;
    dans l'état actuel des choses (et de mes connaissances), je recopie ce petit script pour mes premières variables mais vu la tâche qu'il m'attend, j'aimerais plutôt parvenir à faire une boucle balayant les x variables et me réalisant sur chacune d'entre elles la proc mixed.

    Pourriez vous m'aider en m'expliquer pas à pas la démarche ? je ne suis vraiment pas à l'aise avec ce logiciel.


    d'avance merci,



    Cléo

  2. #2
    Membre éprouvé
    Avatar de Haache
    Homme Profil pro
    Doctorant & Ingénieur Statiaticien Economiste
    Inscrit en
    Mars 2014
    Messages
    349
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Canada

    Informations professionnelles :
    Activité : Doctorant & Ingénieur Statiaticien Economiste

    Informations forums :
    Inscription : Mars 2014
    Messages : 349
    Points : 1 009
    Points
    1 009
    Billets dans le blog
    8
    Par défaut
    Bonjour
    J'ai quelque chose qui pourrait vous intéresser.
    D'abord la limite de ce que je veux vous présenter est la suivante. Il faut que vos 132 variables dépendantes soient dans une même table et se suivent. En d'autre termes, il ne faut pas que dans la table on ait VAR1, après d'autres variables comme Trte par exemple, après VAR2, d'autres choses après et VAR3. Non
    Dans la table une fois qu'ont a VAR1, VAR2 suit, après VAR3 .... VAR132. ça pourrait être un autre ordre par exemple VAR10 VAR14 VAR100 VAR1 etc. mais il ne faut pas que les 132 variables se superposent au début de la table, au milieu ou à la fin peu importe. C'est la petite limite de ce que j'ai pour le moment et je pense que ce ne sera aussi compliqué pour avoir une telle configuration. Il suffit juste de créer deux tables, une contenant uniquement les VAR et l'autres les autres variables, puis faire une fusion horizontale après.

    Voici mon code

    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
    %Macro BoucleMixed(Data,Y1,YN);Data _test_;
    set &Data;
    keep &Y1--&YN;
    run;
     
    proc sql;
    create table _nameVar_ as select name from dictionary.columns where UPCASE(libname)="WORK" and UPCASE(memname)="_TEST_"; quit;
     
    data _null_;
    set _nameVar_;
    call symputx (compress("Var" || _n_),Name);
    call symputx ("Nbre",_n_);
    run;
     
    proc sql; drop table _namevar_, _test_; quit;
     
     
    %do i=1 %to &Nbre; 
        proc mixed data=bddmoy;
        class vache trte trtn;
        model &&Var&i = trte trtn trte*trtn;
        random vache;
        lsmeans trte trtn trte*trtn/pdiff;
        run;
    %end;
    %mend;
    Il s'agira seulement d'appliquer la macro. Il y a trois variable pour la macro. Il y a la table, la première variable qui commence la liste des 132 variables, et la dernière variable qui termine la liste (voilà pourquoi je voulais qu'elles se superposent)

    Je fais un exemple. Je suppose que j'ai la table Local.Data_base ayant les variables dépendantes SEXE, EMPLOI, CHOMAGE, .... , DECES, ACTIF, Trte, Trtn, Vache.

    Ici je complète les autres variables Trte, Trtn et Vache car elles doivent être absolument dans la base. Je voulais juste que mes variables dépendantes soient ensemble.

    Je fais donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %BoucleMixed(Local.Data_base,Sexe,Deces);
    • Faites un tour sur mon siteweb professionnel www.aristideelysee.16mb.com Des codes dans la section "media et code" pouvant vous aider que vous pouvez aussi partager sur les réseaux sociaux.
    • Visiter mon blog en cliquant ici! Des techniques, astuces et macros pour l'analyse quantitative.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Ingénieur
    Inscrit en
    Novembre 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Novembre 2015
    Messages : 9
    Points : 14
    Points
    14
    Par défaut
    Merci Haache pour la réponse, néanmoins mon niveau de compréhension de SAS ne me permet pas encore de tout comprendre au script.
    On est d'accord que dans le code si je mets mes info on a : Data = bddmoy / Y1 = ma première variable (ici pltco) / YN = ma dernière variable (ici mptco) ???

    J'ai donc testé sur un extrait de ma base pour simplement vérifier mon script. J'ai écrit 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
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    data bddmoy;
    infile 'bddmoy.asc';
    input vache periode trte trtn pvdebut pltco tptco mptco;
    run;
    proc print data=bddmoy;
    run;
     
    %Macro BoucleMixed(bddmoy,pltco,mptco);bddmoy _test_;
    set &bddmoy;
    keep &pltco--&mptco;
    run;
     
    proc sql;
    create table _nameVar_ as select name from dictionary.columns where UPCASE(libname)="WORK" and UPCASE(memname)="_TEST_"; quit;
     
    data _null_;
    set _nameVar_;
    call symputx (compress("Var" || _n_),Name);
    call symputx ("Nbre",_n_);
    run;
     
    proc sql; drop table _namevar_, _test_; quit;
     
     
    %do i=1 %to &Nbre; 
        proc mixed data=bddmoy;
        class vache trte trtn;
        model &&Var&i = trte trtn trte*trtn;
        random vache;
        lsmeans trte trtn trte*trtn/pdiff;
        run;
    %end;
    %mend;
    aucune erreur dans mon journal ... mais hormis ma base qui s'affiche, je n'ai aucun résultat dans ma fenêtre de sortie ...

  4. #4
    Membre éprouvé
    Avatar de Haache
    Homme Profil pro
    Doctorant & Ingénieur Statiaticien Economiste
    Inscrit en
    Mars 2014
    Messages
    349
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Canada

    Informations professionnelles :
    Activité : Doctorant & Ingénieur Statiaticien Economiste

    Informations forums :
    Inscription : Mars 2014
    Messages : 349
    Points : 1 009
    Points
    1 009
    Billets dans le blog
    8
    Par défaut
    Bonjour
    c'est quoi le code que vous avez mis pour exécuter la macro ?
    • Faites un tour sur mon siteweb professionnel www.aristideelysee.16mb.com Des codes dans la section "media et code" pouvant vous aider que vous pouvez aussi partager sur les réseaux sociaux.
    • Visiter mon blog en cliquant ici! Des techniques, astuces et macros pour l'analyse quantitative.

  5. #5
    Membre éprouvé
    Avatar de Haache
    Homme Profil pro
    Doctorant & Ingénieur Statiaticien Economiste
    Inscrit en
    Mars 2014
    Messages
    349
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Canada

    Informations professionnelles :
    Activité : Doctorant & Ingénieur Statiaticien Economiste

    Informations forums :
    Inscription : Mars 2014
    Messages : 349
    Points : 1 009
    Points
    1 009
    Billets dans le blog
    8
    Par défaut
    J'ai compris un peu ce que vous avez fait.
    Vous avez modifié ma macro en fait. La première portion du code n'est pas à modifier. C'est comme un fonction que j'ai crée qui ne dépend pas de votre base. Si vous modifiez, c'est comme si par exemple vous rentrer dans le code source de SAS et modifier des choses à cause de votre base. Imaginez un instant ou SAS vous donne le code source de la proc freq et vous modifiez, c'est sûr que la proc ne va plus fonctionner. C'est un truc du genre que vous avez fait.
    Le code suivant est à exécuter sans modification

    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
    %Macro BoucleMixed(Data,Y1,YN);
    Data _test_;set &Data;
    keep &Y1--&YN;
    run;
     
    proc sql;
    create table _nameVar_ as select name from dictionary.columns where UPCASE(libname)="WORK" and UPCASE(memname)="_TEST_"; quit;
     
    data _null_;
    set _nameVar_;
    call symputx (compress("Var" || _n_),Name);
    call symputx ("Nbre",_n_);
    run;
     
    proc sql; drop table _namevar_, _test_; quit;
     
     
    %do i=1 %to &Nbre; 
        proc mixed data=bddmoy;
        class vache trte trtn;
        model &&Var&i = trte trtn trte*trtn;
        random vache;
        lsmeans trte trtn trte*trtn/pdiff;
        run;
    %end; %mend;
    Là vous avez créé la macro. Rien ne se passe encore c'est comme si je viens d'ajouter une nouvelle fonction dans votre SAS. Et une fois encore ne modifier pas le code précédent. Vous vous dites peut être que vous n'avez pas une table qui s'appelle &Data. Mais ça fonctionne comme ça. C'est une manière pour moi d'adapter la macro à votre table après (peu importe le nom de votre table).
    Après avoir exécuté le code précédent (sans le modifier) rien ne se passe. Maintenant on va appliquer la macro à votre table en faisant ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %BoucleMixed(bddmoy,pltco,mptco);
    C'est ce second code qui est adapté à votre table. Et même si demain vous changez de base et de variable, c'est dans ce second code que vous mettez les nom correspondants. Donc la première partie du code crée la macro et ne fait rien encore. Elle devrait être exécuter sans modification (c'est comme si j'ajoute une nouvelle fonction qui s'appelle %BoucleMixed à votre SAS. C'est comme les procédures de votre SAS.
    Maintenant on va l'appliquer à une base, un peu comme on appliquer les proc freq, proc Mi à une base.
    • Faites un tour sur mon siteweb professionnel www.aristideelysee.16mb.com Des codes dans la section "media et code" pouvant vous aider que vous pouvez aussi partager sur les réseaux sociaux.
    • Visiter mon blog en cliquant ici! Des techniques, astuces et macros pour l'analyse quantitative.

  6. #6
    Membre à l'essai
    Femme Profil pro
    Ingénieur
    Inscrit en
    Novembre 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Novembre 2015
    Messages : 9
    Points : 14
    Points
    14
    Par défaut
    Merci beaucoup, ça marche super bien ! Je vous remercie grandement !!!

    Cléo

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

Discussions similaires

  1. Boucle sur une proc mixed
    Par gwirionez dans le forum Macro
    Réponses: 5
    Dernier message: 18/10/2013, 11h05
  2. PROC MIXED :quelques questions
    Par Petru16 dans le forum SAS STAT
    Réponses: 1
    Dernier message: 22/06/2011, 12h02
  3. PROC MIXED SANS print
    Par Can10ce dans le forum ODS et reporting
    Réponses: 4
    Dernier message: 04/11/2009, 14h36
  4. PROC MIXED donnees repetees
    Par babou1278 dans le forum SAS STAT
    Réponses: 5
    Dernier message: 28/05/2008, 19h11
  5. proc iml et boucle do,récupérer les résultats
    Par jacksparow dans le forum SAS IML
    Réponses: 3
    Dernier message: 19/05/2008, 14h19

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