J’ai un nombre de tables (de 1 à 40 ou 50, il faut que soit un paramètre) et avec un SET j’en crée une seule. Comment écrire ça sans répéter 40 ou 100 fois le noms des tables dans le SET. data ww.CMb; set ww.CM1b ww.CM2b … ww.CM40b; run; Merci Bonjour, et merci de votre question. Vous pouvez utiliser un programme comme celui-ci : %MACRO empilement (nbTables) ; DATA ww.CMb ; SET %DO i=1 %TO &nbTables ; […]
Bonjour, Voici mon programme : %macro essai(a=); data outpct; set outpct; variable=’&a’;/*???*/ run; %mend essai; %essai(a=sonf); Je voudrais en fait que dans ma table outpct apparaisse une variable nommée « variable » dont la modalité serait ici ‘sonf’. Comment faire ? Merci d’avance. Il suffit de mettre des doubles guillemets : « &a » , au lieu des simples. Ces derniers bloquent l’action du compilateur macro.
Bonjour, j’ai créé un fichier ODS PDF qui est une suite de tableaux réalisé avec des proc tabulate comme ceci : proc tabulate data=data.tab3 missing ; class cat ; class sonf; tables sonf all=’Total’,cat*(n*f=10.0 pctn=’%’*f=10.1) all=’Total’*(n*f=10.0 pctn=’%’*f=10.1) ; run ; où chaque variable (comme ici « sonf ») est traitée en fonction de la variable « cat ». Je voudrais à chaque fois récupérer le risque relatif (proc freq option cmh) et sous chaque tableau écrire : « Le risque relatif est : …. ». Comment […]
Bonjour, J’ai 2 listes de variables liste1 et liste2 (2 macro variables) %let liste1= a b c ; %let liste2=(a f d) ; %let liste3=; Je souhaite comparer chaque variable de la liste1 avec toutes les variables de la liste2 pour constituer une liste3 excluant de la liste1 les variables figurant dans la liste2 (soit liste3=b c); Ci après le code que j’ai écris %do i=1 %to &n; %if %scan(&liste1,&i) not in &liste2 %then %do; %let liste3=liste3 %scan(&liste1,&i); %end; %end; […]
Comment faire pour renommer l’ensemble des variables d’une table SAS, surtout quand il y en a plus d’une centaine ? Si vos variables ont des noms organisés en séquences, vous pouvez les renommer d’un seul coup avec cette écriture : DATA maTable ; SET maTable (RENAME = (v3-v15 = x20-x32)) ; RUN ; Les variables s’appellent à l’origine v3, v4, v5, …, v15 et après renommage, x20, x21, …, x32. Sinon, vous pouvez construire une table SAS avec les […]
Bonjour. Je souhaiterais pouvoir livrer à un utilisateur un macro-programme compilé. Comment dois-je m’y prendre, et quelles manipulations doit-il effectuer de son côté pour l’utiliser ? Merci. Déclarer une bibliothèque sur ce répertoire. LIBNAME ma_macro « c:\temp » ; Déclarer à SAS qu’on veut y mettre des macros (ou qu’il y en a déjà là). OPTIONS MSTORED SASMSTORE = ma_macro ; Exécuter le macro-programme en modifiant sa PREMIERE ligne : %MACRO mon_macro_programme (parametre1, parametre2, …) / STORE ; … %MEND mon_macro_programme ; […]
Bonjour. J’ai des problèmes avec le fonctionnement des macro-variables. Par exemple, si on a : %let mvn = 1 ; %let mvtab = total ; %let mvtab1 = mois ; &&mvtab&mvn -> &mvtab1 soit mois, là je comprends. Mais : &&&mvtab&mvn -> &&mvtab1 -> &mois dans mon esprit, mais non ! Pouvez-vous m’expliquer ? Il y a 5 règles pour la transformation d’une chaîne de caractères contenant des &. Ce sont : 1) &mv1 ==> valeur de la macro-variable […]
Bonjour, je rencontre un problème après avoir initialiser SEUIL et ECARTY à l’aide de symput, la comparaison entre ces deux valeurs ne se fait pas correctement: &SEUIL.>&ECARTY. (en vérifiant avec des put dans le log, 10.4 est inférieur à 4.5987562 !!) La comparaison avec %SYSEVALF ne fonctionne pas non plus… Merci de votre réponse Vous n’étiez pas loin d’une solution à votre problème avec %SYSEVALF. En effet, le problème vient du fait que les valeurs des macro-variables sont traitées […]
La procédure suivante proc transpose data=infic prefix=cnt out=outfic; var nocnt; by client; run ; va générer cnt1 à cntn. Comment récupérer le nombre de variables générées (n) dans une étape data ? Merci. Pour mettre ce nombre dans une macro-variable, voici un premier programme : DATA _NULL_ ; SET outfic ; ARRAY transpose cnt: ; CALL SYMPUT (« nbNllesVar », DIM(transpose)) ; STOP ; RUN ; Vous récupérez le nombre de variables créées par la procédure TRANSPOSE dans la macro-variable &nbNllesVar. […]
Je voudrais utiliser dans un LIKE « %…% » la valeur d’une macro-variable à la place des … Le programme suivant ne fonctionne pas : %LET recherche = ar ; PROC PRINT DATA = sashelp.class ; WHERE soc LIKE « %&recherche% » ; RUN ; Comment résoudre ce problème ? Il faut masquer au macro-compilateur les deux %. Pour cela, on utilisera la macro-fonction %NRQUOTE, qui masque des caractères pendant la phase de résolution (transformation du programme par le macro-compilateur)… Le macro-compilateur n’est […]
J’ai des catalogues SASMACR de macro-programmes compilés dans plusieurs répertoires différents. Mais l’option SASMSTORE n’autorise qu’une seule bibliothèque. Comment utiliser tous mes catalogues SASMACR simultanément ? On peut créer une seule bibliothèque qui en regroupe en fait plusieurs (depuis la version 8.0). On peut donc déclarer par ce biais plusieurs chemins pour plusieurs catalogues de macros… LIBNAME bib1 « … » ; LIBNAME bib2 « … » ; LIBNAME bibmac (bib1 bib2) ; option SASMSTORE = bibmac MSTORED ; SAS ira d’abord chercher […]
J’aimerai savoir s’il est possible de faire s’arrêter le programme et annuler les éventuelles instructions suivant l’appel du MP (un sorte de break ), si une certaine condition est vérifiée. %if &Nberr=0 %then %do; « arrêter tout » %end ; Si c’est possible comment faire ? Avec les versions de SAS antérieures à la 9, on ne peut traiter le problème qu’à « l’ancienne » avec un %GOTO vers un autre point du programme (après lequel on ne fera plus rien). %macro […]
J’ai une macro-variable i à laquelle je voudrais ajouter 1. Quand j’écris %let i=&i+1 ; je n’obtiens pas le résultat recherché (j’ai 3+1 comme valeur de i au lieu de 4). Que faire ? Il ne faut pas perdre de vue qu’une macro-variable ne contient jamais QUE DU TEXTE. Alors quand on dit à SAS quelque chose comme %let i = &i + 1 ; pour lui ce ne sont que les caractères ‘+’ et ‘1’ ajoutés à la fin […]
Je souhaite générer des tables automatiquement avec un programme sas, mais impossible d’utiliser les fonctions cards et datalines ! Quelle est l’origine du problème et existe-t-il une astuce pour y remédier ? Merci d’avance. exemple de script : %macro essai; data table; input variable; cards; 1 2 3 ; run; %mend essai; %essai; ERROR: The macro ESSAI generated CARDS (data lines) for the DATA step, which could cause incorrect results. The DATA step and the macro will stop executing. NOTE: […]
Bonjour, J’essaie de récupérer des données d’un fichier texte dans des macro variables sans créer une table sas en dur en utilisant data _null_. En lançant la code sas ci-après, je n’ai pas de message d’erreur mais je ne sais pas comment récupérer les données dans 2 macro variables sans faire un call symput qui est plutot basé sur une table sas en dur. Exemple: Soit le fichier Essai.txt ayant la structure suivante: a, b Toto, lulu Code sas: data […]
Bonjour, Pouvez-vous me dire s’il existe une macro ou procédure qui exporte une table en fichier excel (97) directement? Merci d’avance pour votre précieuse réponse. Bonjour. Si vous possédez SAS version 8 ou 9, c’est très simple : ODS HTML FILE = « chemin et nom de votre fichier.xls » ; TITLE ; FOOTNOTE ; PROC PRINT DATA = votre_table LABEL NOOBS ; RUN ; ODS HTML CLOSE ; Vous obtiendrez ainsi une pseudo feuille Excel (en fait, c’est une page Web […]
Bonjour,
Je souhaiterai réaliser une analyse discriminante qualitative via la méthode DISQUAL. Je sais qu’il faut réaliser une ACM pour transformer les variables qualitatives en variable quantitatives et que c’est à partir des résultats des facteurs de l’ACM que je pourrai ensuite effectuer l’analyse discriminante.
Bonjour, j’aurais aimé savoir s’il existe une petite macro pour dessiner le graphique des axes factoriels des données obtenues par la proc corresp ?
Jusqu’à présent, je ne peux que tout envoyer sous Excel et faire un lourd traitement car on ne peut avoir le nom des modamités sur le graphiques en même temps que les points…
Merci d’avance !