Desktop productivity for business analysts and programmers

Reading the value of a macro variable sas from a shell script

Accepted Solution Solved
Reply
Occasional Contributor
Posts: 13
Accepted Solution

Reading the value of a macro variable sas from a shell script

 

Hello everyone, 

 

I am trying to read the value of a macro variable sas from my shell script 

code SAS

%let rc1=&x ;
x setenv var &rc1.;

Shell script 

period_ex=$(date --date='30 days ago' +%Y%m)
/sas/sasbin/SASFoundation/9.4/sas -sysin /sasdata/04_code_sas/0102_Flux_Client_sas.sas -autoexec /sasdata/04_code_sas/0100_autoexec.sas -NOPRINT -nosyntaxcheck -noerrabend -log /sasdata/07_logs/0102_Flux_Client_sas_$(date +"%Y%m%d_%H%M%S").log -SYSPARM $period_ex%$(date +"%Y%m%d_%H%M%S") -XCMD 
echo $var

but the value is empty 

Can someone help me please

 


Accepted Solutions
Solution
‎08-22-2017 07:04 AM
Super User
Posts: 10,534

Re: Reading the value of a macro variable sas from a shell script

Short answer: you can't do that.

Longer answer:

When you run SAS from a shell script, the shell forks off a copy of itself that will run the SAS command via the exec() system call. What you manipulate is therefore the environment of a child of the shell that runs the shell script. Since the child has no access to the parent's environment, changes will be lost when the child terminates.

 

Possible workarounds:

- save the setting of the environment variable to a file and source that in the shell script:

SAS:

data _null_;
file '$HOME/tempscript';
put "VAR=xxx";
run;

shell script:

sas program.sas
. $HOME/tempscript
rm $HOME/tempscript

- you can set return codes with

abort return &rc.;

and evaluate them in the script

sas program.sas
RC=$?

BTW, do test external commands from the commandline before using them in an x statement.

AFAIK, setenv() is a system call (ie for C programming), but not a system command.

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
How to convert datasets to data steps
How to post code

View solution in original post


All Replies
Solution
‎08-22-2017 07:04 AM
Super User
Posts: 10,534

Re: Reading the value of a macro variable sas from a shell script

Short answer: you can't do that.

Longer answer:

When you run SAS from a shell script, the shell forks off a copy of itself that will run the SAS command via the exec() system call. What you manipulate is therefore the environment of a child of the shell that runs the shell script. Since the child has no access to the parent's environment, changes will be lost when the child terminates.

 

Possible workarounds:

- save the setting of the environment variable to a file and source that in the shell script:

SAS:

data _null_;
file '$HOME/tempscript';
put "VAR=xxx";
run;

shell script:

sas program.sas
. $HOME/tempscript
rm $HOME/tempscript

- you can set return codes with

abort return &rc.;

and evaluate them in the script

sas program.sas
RC=$?

BTW, do test external commands from the commandline before using them in an x statement.

AFAIK, setenv() is a system call (ie for C programming), but not a system command.

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
How to convert datasets to data steps
How to post code
☑ This topic is solved.

Need further help from the community? Please ask a new question.

Discussion stats
  • 1 reply
  • 314 views
  • 1 like
  • 2 in conversation