Posez votre question Signaler

Problème de macro sous SAS

Mathi - Dernière réponse le 19 mai 2008 à 13:32
Bonjour, je travaille sous SAS mais je suis néophyte. On m'a écrit une macro à mettre dans mon programme mais SAS me dit instruction incorrecte ou mal utilisée et surtout ne reconnait pas les 'if' et les 'then'. Il doit y avoir une erreur de syntaxe mais je ne la trouve pas. MERCI DE VOTRE AIDE.....
Voilà ce que j'ai écrit :
%macro recod(var);
If (&var eq 'AUCUNE DIFFICULTE') then &var=0;
If (&var eq 'QUELQUES DIFFICULTES') then &var=1;
If (&var eq 'BEAUCOUP DE DIFFICULTES') then &var=2;
If (&var eq 'INCAPABLE DE LE FAIRE') then &var=3;
%mend;
%recod(PEUT_HABILLER);
%recod(CHEVEUX);
%recod(CHAISE);
%recod(LEVER_LIT);
%recod(VIANDE);
%recod(PEUT_BOIRE);
%recod(BRIQUE);
%recod(MARCHER);
%recod(MONTER);
%recod(LAVER);
%recod(BAIGNER);
%recod(ASSEOIR);
%recod(PRENDRE);
%recod(BAISSER);
%recod(PORTE);
%recod(DEVISSER);
%recod(ROBINET);
%recod(FAIRE_COURSE);
%recod(VOITURE);
%recod(MENAGE);
%macro deuxdim (var1, var2, var3);
If (&var1 eq .) then &var3=&var2;
If (&var2 eq .) then &var3=&var1;
If (&var1 ge &var2) then &var3=&var1;
If (&var1 lt &var2) then &var3=&var2;
%mend;
%deuxdim(PEUT_HABILLER, CHEVEUX, haq1);
%deuxdim(CHAISE, LEVER_LIT, haq2);
%deuxdim(MARCHER,MONTER, haq4);
%deuxdim(PRENDRE, BAISSER, haq6);
%macro troisdim(var1, var2, var3, var4);
If(&var1 eq . or &var2 eq .) then &var4=&var3;
If(&var1 eq . or &var3 eq .) then &var4=&var2;
If(&var2 eq . or &var3 eq .) then &var4=&var1;
If(&var1 ge &var2) then &var4=&var1;
If(&var1 lt &var2) then &var4=&var2;
If(&var4 ge &var3) then &var4=&var4;
If(&var4 lt &var3) then &var4=&var3;
%mend;
%troisdim(VIANDE, PEUT_BOIRE, BRIQUE, haq3);
%troisdim(LAVER, BAIGNER, ASSEOIR, haq5);
%troisdim(PORTE, DEVISSER, ROBINET, haq7);
%troisdim(FAIRE_COURSE, VOITURE, MENAGE, haq8);
%macro recal(var1, var2);
If (&var1 eq 1 and &var2 eq .) then &var2=2;
If (&var1 eq 1 and &var2 lt 2) then &var2=2;
%mend;
%recal(ACCESS_HABIT,HAQ1); %recal(AIDE_HABIT,HAQ1);
%recal(CHAISE_SP,HAQ2); %recal(AIDE_LEVER,HAQ2);
%recal(USTENSILE,HAQ3);%recal(AIDE_MANGER,HAQ3);
%recal(CANNE,HAQ4);%recal(DEAMBU,HAQ4);%recal(BEQUILLE,HAQ4);
%recal(CHAISE_ROUE,HAQ4);%recal(AIDE_MARCHER,HAQ4);
%recal(WC,HAQ5);%recal(SIEGE_BAIN,HAQ5);%recal(LG_MANCHE_SALLE_BAIN,HAQ5);
%recal(POIGNEE_BAIN,HAQ5);%recal(HYGIENE,HAQ5);
%recal(ATTRAPE,HAQ6);%recal(ATTRAPER,HAQ6);
%recal(OUVRE_POT,HAQ7);%recal(SAISIR,HAQ7);
%recal(COURSES,HAQ8);
HAQ=sum(of HAQ1, HAQ2, HAQ3, HAQ4, HAQ5, HAQ6, HAQ7, HAQ8);
HAQ=HAQ/8;;
Lire la suite 

Problème de macro sous SAS »

6 réponses
Réponse
+1
moins plus
Salut,
Dans une macro, les if et then deviennent des macros commandes donc mettre un % avant if et then i.e: %if et %then.
Ajouter un commentaire
Réponse
+1
moins plus
Resalut,
Desolé je n'ai pas lu le reste de ton programme.
Je crois que si tu definis ta macro variable comme étant alphanumerique, a l'appel de ta macro, l'argument sera mis entre ''.
Et aussi, pour le test If (&var1 eq .), au lieu de . tu mets ''. Le point est un missing data pour une variable numerique.
Je crois que c'est tout ce que j'ai pu deceler d'eventuelles erreures, avises moi s'il manque autre chose.
Mathi - 7 mars 2007 à 17:07
Merci pour ta réponse mais je comprends pas tout...
Comment je définis la macro variable comme alphanumérique ?
Sinon, j'ai remplacé les . par '' mais pour l'instant ça ne change rien.
Autre chose, je voulais te demander : avant de lancer ma macro, il faut que je précise data=fichier dans lequel se trouvent les infos; run; c'est bien ça ?
parceque pour l'instant, à aucun moment je ne lui ai indiqué où trouver les infos ????
hssissen- 7 mars 2007 à 17:47
Quand tu dis;
If (&var eq 'AUCUNE DIFFICULTE') then &var=0;
tu as bien mis 'AUCUNE DIFFICULTE' qui est une chaine de caracteres donc si on veut tester si missing data mettre %if &var =''.
Et puis a l'appel de ta macro, tu dois donner le nom de ton data set pour qu'il sache avec quelles donnees il va faire ses traitements. En sas, tout traitement sur des donnees doivent se faire en precisant le data set de ces donnees avec:

DATA ton_data_set;
set NOM_DATA;
traitements_a_faire;
run;

Donc, au prealable, crée ton data set avant de faire les traitement que tu veux faire.

J'espere avoir été tres clair, sinon fais le moi savoir.
Mathi - 7 mars 2007 à 18:51
merci beaucoup . ça marche!
Ajouter un commentaire
Réponse
+0
moins plus
j'ai un projet sas a faire avec des macros mais je n'ai pas compris comment cela fonctionnait et vu que vous en parliez ici, pouvez vous m'expliquer en général
Ajouter un commentaire
Ce document intitulé « problème de macro sous SAS » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?