You cannot modify an environment variable value for the currently running Windows process from a command line invoked in that process. When the command line is invoked, it spawns a NEW "child" process which inherits its characteristics from the currently running "parent" process. Setting an environment variable in that command window modifies the environment only for the child process, not the parent process. You can demonstrate the problem it this way:
1. Make a batch file (setenv.bat) that sets an environment variable value, then queries the environment for the new value and writes the result to a text file:
set test="This is a test"
set TEST > C:\TEMP\env.txt
2. Execute the batch from SAS, then read in the text file:
options noxwait;
data _null_;
if _n_=1 then do;
command='C:\temp\setenv.bat';
call system(command);
END;
run;
data _null_;
infile "c:\temp\env.txt";
input;
put _INFILE_;
run;
A look at the log tells us that, in the Windows session where the SET command executed, the variable was actually set:
145 data _null_;
146 if _n_=1 then do;
147 command='C:\temp\setenv.bat';
148 call system(command);
149 END;
150 run;
NOTE: DATA statement used (Total process time):
real time 0.18 seconds
cpu time 0.06 seconds
151
152 data _null_;
153 infile "c:\temp\env.txt";
154 input;
155 put _INFILE_;
156 run;
NOTE: The infile "c:\temp\env.txt" is:
Filename=c:\temp\env.txt,
RECFM=V,LRECL=32767,File Size (bytes)=21,
Last Modified=05Mar2018:13:28:43,
Create Time=05Mar2018:13:26:52
test="This is a test"
NOTE: 1 record was read from the infile "c:\temp\env.txt".
The minimum record length was 19.
The maximum record length was 19.
NOTE: DATA statement used (Total process time):
real time 0.00 seconds
cpu time 0.00 seconds
3. Write a program to query the current Windows environment for a variable we are can be sure exists (to test the process) and then for the value we set with the batch file:
data _null_;
sashome=sysget('sashome');
put sashome=;
test=sysget('test');
put test=;
run;
The SAS log shows success getting the SASHOME variable value:
INFO: Character variables have defaulted to a length of 200 at the places given by: (Line):(Column). Truncation can result. 180:4 sashome 182:4 test sashome=C:\Program Files\SASHome
but the TEST variable does not exist in this (the parent) Windows session:
NOTE: Invalid argument to function SYSGET('test') at line 182 column 9.
test=
sashome=C:\Program Files\SASHome test= _ERROR_=1 _N_=1
I'm thinking that you probably just want to modify an environment variable for the current SAS session, and that can easily be done at invocation. Either
1. Add the specification to the SAS configuration file, or adding it to the command that invokes SAS. If you had the SAS Windowing Edition installed, you could look at the properties for the shortcut that starts SAS. The value in the Target: box on the Shortcut tab looks something like this:
"C:\Program Files\SASHome\SASFoundation\9.4\sas.exe" -CONFIG "C:\Program Files\SASHome\SASFoundation\9.4\nls\en\sasv9.cfg"
To set the environment variable TEST for the SAS sessions invoked by this shortcut, just change that to read:
"C:\Program Files\SASHome\SASFoundation\9.4\sas.exe" -CONFIG "C:\Program Files\SASHome\SASFoundation\9.4\nls\en\sasv9.cfg" set test "This is a test"
2. Alternatively, you can edit the configuration file and add the following line:
-test "This is a test"
In the above example, you can see from the shortcut that the configuration file can be found at: C:\Program Files\SASHome\SASFoundation\9.4\nls\en\sasv9.cfg
Because you are using Enterprise Guide, you may not have access to modify SAS invocation options. If you are just using Enterprise Guide as the interface for locally installed SAS, you should be able to find and update the configuration file. For a shared SAS environment with a SAS workspace server, you will need to contact the SAS administrator.
I hope this helps.
Mark
... View more