[SAS] lancer programme SAS par batch
Résolu/Fermé
A voir également:
- Sas de lege lata free
- Word 2013 free download - Télécharger - Traitement de texte
- Sketchup free - Télécharger - 3D
- Free office - Télécharger - Suite bureautique
- Free ocr - Télécharger - Divers Bureautique
- Zimbra free - Guide
4 réponses
Salut,
Merci encore pour ta réponse. De fil en aiguille, j'ai fini par obtenir la réponse... La voici, si ça t'intéresse.
a+
Aza
______________________________
Il existe plusieurs façons de récupèrer une variable d'environnement avec SAS sous Unix.
La plus élégante est d'utiliser la fonction macro %SysGet(), qui fait exactement ce que tu veux faire.
Exemple :
Dans le script Shell on a quelque chose comme :
#-- Les variables pour lancer SAS
JOUR=????
SASEXE=/exploit/sas82/sas
DIR=/MONREP
PGMSAS=MonProg.sas
FILE_LOGSAS=${MONREP}/log/MonProg.logSAS.${JOUR}
#-- La variable que je veux récupérer dans SAS qui contient l'argument de ma macro
MaVariable=MonArgument
#-- ATTN : Cette variable doit être une variable d'environnement ...
export MaVariable
#-- On lance le programme SAS
${SASEXE} -sysin ${DIR}/${PGMSAS} -log ${FILE_LOGSAS}
Le programme SAS MonProg.sas ressemblera à ça :
Option NoNotes;
%MACRO Macro1(param);
%Put =====> Le parametre passé à la Macro est : ¶m ;
%MEND;
Option Notes;
%Macro1(%SysGet(MaVariable));
Et voila ...
En lançant le script, tu devrais voir apparaitre dans la Log la ligne suivante :
=====> Le parametre passé à la Macro est : MonArgument
Merci encore pour ta réponse. De fil en aiguille, j'ai fini par obtenir la réponse... La voici, si ça t'intéresse.
a+
Aza
______________________________
Il existe plusieurs façons de récupèrer une variable d'environnement avec SAS sous Unix.
La plus élégante est d'utiliser la fonction macro %SysGet(), qui fait exactement ce que tu veux faire.
Exemple :
Dans le script Shell on a quelque chose comme :
#-- Les variables pour lancer SAS
JOUR=????
SASEXE=/exploit/sas82/sas
DIR=/MONREP
PGMSAS=MonProg.sas
FILE_LOGSAS=${MONREP}/log/MonProg.logSAS.${JOUR}
#-- La variable que je veux récupérer dans SAS qui contient l'argument de ma macro
MaVariable=MonArgument
#-- ATTN : Cette variable doit être une variable d'environnement ...
export MaVariable
#-- On lance le programme SAS
${SASEXE} -sysin ${DIR}/${PGMSAS} -log ${FILE_LOGSAS}
Le programme SAS MonProg.sas ressemblera à ça :
Option NoNotes;
%MACRO Macro1(param);
%Put =====> Le parametre passé à la Macro est : ¶m ;
%MEND;
Option Notes;
%Macro1(%SysGet(MaVariable));
Et voila ...
En lançant le script, tu devrais voir apparaitre dans la Log la ligne suivante :
=====> Le parametre passé à la Macro est : MonArgument
hssissen
Messages postés
844
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
9 janvier 2017
50
14 févr. 2006 à 14:59
14 févr. 2006 à 14:59
Salut,
Dis nous comment tu fais passer ton parametre a ton programme?
Dis nous comment tu fais passer ton parametre a ton programme?
Bonjour et merci,
Voici les tests que j'ai faits :
(sachant que ma macro est déclarée comme ça :
%macro repa_lirehisto(env=); )
$SASEXE -sysin $DIR/$PGMSAS(env=R) -log $FILE_LOGSAS
> dans ce cas, la log me dit que la parenthèse ( est inattendue
$SASEXE -sysin $DIR/$PGMSAS R -log $FILE_LOGSAS
> dans ce cas, sas cherche à exécuter R.sas
j'ai même essayé ça, bien que ça semble tout à fait tordu :
PGMSAS=repa_lirehisto(env=R).sas
puis
$SASEXE -sysin $DIR/$PGMSAS -log $FILE_LOGSAS
> dans ce cas, c'est à la déclaration de PGMSAS que ça plante
J'ai beau chercher de la doc sur ce sujet, je ne trouve rien !
Sais-tu comment faire ?
Merci d'avance,
Aza
Voici les tests que j'ai faits :
(sachant que ma macro est déclarée comme ça :
%macro repa_lirehisto(env=); )
$SASEXE -sysin $DIR/$PGMSAS(env=R) -log $FILE_LOGSAS
> dans ce cas, la log me dit que la parenthèse ( est inattendue
$SASEXE -sysin $DIR/$PGMSAS R -log $FILE_LOGSAS
> dans ce cas, sas cherche à exécuter R.sas
j'ai même essayé ça, bien que ça semble tout à fait tordu :
PGMSAS=repa_lirehisto(env=R).sas
puis
$SASEXE -sysin $DIR/$PGMSAS -log $FILE_LOGSAS
> dans ce cas, c'est à la déclaration de PGMSAS que ça plante
J'ai beau chercher de la doc sur ce sujet, je ne trouve rien !
Sais-tu comment faire ?
Merci d'avance,
Aza
hssissen
Messages postés
844
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
9 janvier 2017
50
15 févr. 2006 à 14:56
15 févr. 2006 à 14:56
Salut,
Je ne suis pas sur de te comprendre, mais j'essaie qusnd même:
Tu as donc une macro dans un programme SAS et que tu veux passer un parametre a ta macro lors de l'execution de ton programme SAS.
Moi a ta place, je passerai le parametre de la macro lors de l'appel de ta macro dans le programme SAS et je l'execute en Batch avec:
SAS ton_programme.sas
C'esr ca que tu veux faire?
Je ne suis pas sur de te comprendre, mais j'essaie qusnd même:
Tu as donc une macro dans un programme SAS et que tu veux passer un parametre a ta macro lors de l'execution de ton programme SAS.
Moi a ta place, je passerai le parametre de la macro lors de l'appel de ta macro dans le programme SAS et je l'execute en Batch avec:
SAS ton_programme.sas
C'esr ca que tu veux faire?
Re bonjour,
Oui c'est vrai que ce n'est pas très clair, désolée :-s et en tout cas merci de te pencher sur la question !
En fait, le programme SAS qui contient la macro est le même quelque soit l'environnement dans lequel je suis (quelque soit le serveur à partir duquel j'exécute le programme), et il doit rester le même. du coup, je ne peux pas appliquer ta solution...
Cependant, je voudrais avoir un comportement différent selon l'environnement.
Par contre, le script qui lance le programme SAS est, lui, différent selon l'environnement, je voudrais donc passer l'environnement en paramètre dans le batch, poru pouvoir le récupérer dans le programme, et donc la macro.
Mais je ne sais pas si c'est possible... (en effet, il y a une différence entre passer un param dans le programme ou dans la macro !!!)
J'espère avoir été plus claire !
merci
aza
Oui c'est vrai que ce n'est pas très clair, désolée :-s et en tout cas merci de te pencher sur la question !
En fait, le programme SAS qui contient la macro est le même quelque soit l'environnement dans lequel je suis (quelque soit le serveur à partir duquel j'exécute le programme), et il doit rester le même. du coup, je ne peux pas appliquer ta solution...
Cependant, je voudrais avoir un comportement différent selon l'environnement.
Par contre, le script qui lance le programme SAS est, lui, différent selon l'environnement, je voudrais donc passer l'environnement en paramètre dans le batch, poru pouvoir le récupérer dans le programme, et donc la macro.
Mais je ne sais pas si c'est possible... (en effet, il y a une différence entre passer un param dans le programme ou dans la macro !!!)
J'espère avoir été plus claire !
merci
aza
hssissen
Messages postés
844
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
9 janvier 2017
50
15 févr. 2006 à 16:45
15 févr. 2006 à 16:45
Oui maintenant je crois que c'est plus claire. J'avoue que je n'ai jamais abordé ce type problème bien que je travaille sur SAS depuis des années et toujours sur un même système (Linux). Un conseil que je peux te donner est de consulter le support technique SAS pour te débloquer.
http://support.sas.com/index.html.
Désolé de ne pouvoir t'aider, toujours est-il que si une solution a ton problème me traverse l'esprit je te tiendrai au courant.
Bonne chance.
http://support.sas.com/index.html.
Désolé de ne pouvoir t'aider, toujours est-il que si une solution a ton problème me traverse l'esprit je te tiendrai au courant.
Bonne chance.
Bonjour,
Au lieu de passer le paramètre (env=R) dans la macro : $SASEXE -sysin $DIR/$PGMSAS(env=R) -log $FILE_LOGSAS, il faut ajouter env comme variable d'environnement.
Donc , dans le batch qui lance la commande "$SASEXE -sysin $DIR/$PGMSAS(env=R) -log $FILE_LOGSAS" , il faut ajouter la ligne suivante :
SET ENV=REC pour windows
UNIX : ENV=REC EXPORT ENV ;
en suite dans le programme SAS appelé ( $DIR/$PGMSAS ) , il faut recuperer la valeur de "ENV" en ajoutant la ligne : %let ENV=%sysget(ENV) ;
%put &ENV ;
Au lieu de passer le paramètre (env=R) dans la macro : $SASEXE -sysin $DIR/$PGMSAS(env=R) -log $FILE_LOGSAS, il faut ajouter env comme variable d'environnement.
Donc , dans le batch qui lance la commande "$SASEXE -sysin $DIR/$PGMSAS(env=R) -log $FILE_LOGSAS" , il faut ajouter la ligne suivante :
SET ENV=REC pour windows
UNIX : ENV=REC EXPORT ENV ;
en suite dans le programme SAS appelé ( $DIR/$PGMSAS ) , il faut recuperer la valeur de "ENV" en ajoutant la ligne : %let ENV=%sysget(ENV) ;
%put &ENV ;
15 févr. 2006 à 19:46