[SAS] lancer programme SAS par batch

Résolu/Fermé
Aza - 14 févr. 2006 à 10:33
 younes - 1 oct. 2013 à 16:54
Bonjour,

J'aimerais lancer un programme SAS à partir d'un script unix (.sh).
J'y arrive en utilisant la commande suivante :

$SASEXE -sysin $DIR/$PGMSAS -log $FILE_LOGSAS

avec :
SASEXE=/exploit/sas82/sas
DIR=/app/CASTING/prog/pgmsas/repa
PGMSAS=repa_lirehisto.sas
FILE_LOGSAS=/app/CASTING/log/histo.logSAS.$JOUR

Par contre, lorsque je souhaite passer un paramètre au programme sas, je n'y arrive pas.

Est-ce possible ? Si oui, comment doit-on faire (où mettre le paramètre, avec quelle syntaxe) ?

Merci bcp d'avance...

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
1
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 à 19:46
Merci, je garderai ça dans ma librairie!
0
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
Salut,
Dis nous comment tu fais passer ton parametre a ton programme?
0
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
0
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
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?
0
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
0
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
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.
0
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 ;
0