[SAS] lancer programme SAS par batch

Résolu
Aza -  
 younes -
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...
A voir également:

4 réponses

Aza
 
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   Statut Membre Dernière intervention   50
 
Merci, je garderai ça dans ma librairie!
0
hssissen Messages postés 844 Date d'inscription   Statut Membre Dernière intervention   50
 
Salut,
Dis nous comment tu fais passer ton parametre a ton programme?
0
Aza
 
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   Statut Membre Dernière intervention   50
 
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
Aza
 
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   Statut Membre Dernière intervention   50
 
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
younes
 
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