|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : septembre 2008 Messages : 5 ![]() |
Bonjour à tous,
j'ai absoluement besoin de créer une macro SAS donnant une matrice de corrélations polyseriales (corrélation entre une variable ordinale et une variable continue). J'ai trouvé une macro déjà existante donnant 6 valeurs de corrélations polyseriales et autres tests. Je ne m'intéresse dans mon étude qu'à la corrélation correspondante à la métode 5 qui est similaire à celle rendue par PRELIS. De plus cette macro ne prend en entrée qu'un couple de variables ordinale et continue. Utiliser donc couple après couple cette macro s'avère donc très long! Je souhaiterais donc modifier cette macro afin de donner en entrée toutes les variables ordinales et continues dont j'ai besoin, et obtenir en sortie une matrice de corrélations. Les variables ordinales seraient représentées par les colonnes, les continues par les lignes: l'intersection entre une ligne et une colonne serait donc la corrélation polysériale correspondante à la méthode 5 pour le couple intersecté. La macro en question est décrite sur le site suivant : http://yungjui.googlepages.com/polyserial Mon problème est que je ne connais vraiment rien au langage des macros sous SAS. Je pense que modifier celle-ci ne doit pas être très compliqué.... De plus j'en ai besoin très rapidement! Est-ce quelqu'un s'y connaissant en macro SAS pourrait jeter un oeil?? Cordialement, Marion |
|
|
00
|
|
|
#2 | ||
|
Expert Confirmé
![]() ![]() Olivier DecourtFormateur en informatique Inscription : avril 2008 Messages : 1 482 ![]() |
Bonjour Marion.
Après avoir très rapidement jeté un oeil au programme, je peux au moins te dire que l'aspect macro est très réduit. Il ne sert ici, réellement, qu'à faire varier les noms des variables et de la table traitées. Tous les calculs sont codés en IML... et prévus pour être faits sur un couple de variables à la fois. A moins de se plonger (à corps perdu, voire en apnée totale vu la tronche du code) dans le détail des calculs et de les adapter à plusieurs séries de couples (avec des boucles DO en IML), le mieux qu'on puisse bricoler est de faire une boucle autour du code existant, pour l'appeler autant de fois que nécessaire (et éventuellement stocker le résultat dans une table). Ca sera toujours aussi lent (sauf à tailler dans le code IML pour se limiter aux parties concernant la méthode 5... perso je ne me sens pas de faire ça, les commentaires du code n'indiquant pas vraiment ce qui sert à quoi ; du coup, ça va tourner à "et si je coupe ce morceau-là, est-ce que ça change quelque chose ?", un processus un peu long, surtout quand comme moi on n'a aucune idée du résultat attendu !). Si au moins cette petite touche d'automatisation (mais, je le répète, qui n'accélèrera rien) t'intéresse, il faut coder quelque chose comme : Code :
Olivier |
||
|
|
00
|
|
|
#3 | ||||
|
Invité de passage
![]() Inscription : septembre 2008 Messages : 5 ![]() |
merci beaucoup d avoir pris la peine de rédiger ce code!
J'ai essayé sur un exemple mais ça ne marche pas.... Code :
Code :
Merci encore, Marion |
||||
|
|
00
|
|
|
#4 | ||
|
Expert Confirmé
![]() ![]() Olivier DecourtFormateur en informatique Inscription : avril 2008 Messages : 1 482 ![]() |
Mea culpa, j'ai fait un mauvais copier/coller dans une manip de dernière minute. J'en profite pour rendre le code légèrement plus robuste, et cette fois j'ai vérifié sur vos données, ça doit fonctionner, ça produit une jolie matrice carrée...
Code :
Olivier |
||
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : septembre 2008 Messages : 5 ![]() |
non toujours pas....
cette fois SAS affiche ceci : AVERTISSEMENT: Sortie 'RHO_PVALUE_CI_CHISQ_DF_P_RMSEA__' non créée. Assurez-vous que le nom, le libellé ou le chemin de l'objet est correctement orthographié. Vérifiez également que les options de procédure appropriées sont utilisées pour générer l'objet de sortie demandé. Par exemple, vérifiez que l'option NOPRINT n'est pas utilisée. ERREUR: Le fichier WORK.NEW.DATA n'existe pas. La matrice Résultats est vide. Savez-vous d'où cela provient? |
|
|
00
|
|
|
#6 | ||||
|
Expert Confirmé
![]() ![]() Olivier DecourtFormateur en informatique Inscription : avril 2008 Messages : 1 482 ![]() |
Bon, visiblement, votre version de SAS et la mienne ne sont pas d'accord sur le nom que porte la sortie produite par la macro PolySeriales. Alors plutôt que de tourner autour d'une solution, je vous propose de lancer le code suivant, après avoir nettoyé la Log :
Code :
Code :
Vous copiez-collez la valeur après "Name:" (ou son équivalent) dans l'instruction ODS OUTPUT ... = work.new ((WHERE=(col1=:"Method5")) ; à la place des ... et là, inch'Allah, ça devrait fonctionner. Je croise les doigts. |
||||
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : septembre 2008 Messages : 5 ![]() |
Ça marche!!!!!!
c'est parfait!!! Vous m'épargnez des heures et des heures de copier-coller manuels!! Merci beaucoup encore!! Marion |
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Inscription : septembre 2008 Messages : 5 ![]() |
Un dernier détail : la macro telle quelle inverse les lignes et les colonnes.
Pour résoudre, il suffit juste d'inverser les i et les j dans le code de le Macro ci-dessus! Je le rajoute au cas où qqn en aurait besoin un jour! ^^ |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com