This code works in SAS EG run on local (hidden sensitive information):
*---- two values: DEV (ALIASDEV) and PROD (ALIASPROD);
%let my_environment = ALIASDEV;
I don't know why it worked on the local, but the ampersands require a third to resolve properly. Any time you store the value of a macro variable in another macro variable, you must use three ampersands to retrieve it.
Basic use cases:
&val_sept
and &val_oct
, you can use &&val_&mon
to retrieve it assuming %let mon=sept
.&sept
and &oct
, then you would use &&&mon.
to retrieve &sept
from a variable %let mon=sept
.That's because of how multiple ampersands resolve; SAS makes multiple passes through until all are resolved.
In each pass:
So:
%let x=a;
%let a=b;
%let b=c;
%put &&x;
1: &&x
-> (&&)(x)
-> (&)(x)
-> &x
2: &x
-> a
%put &&&x;
1: &&&x
-> (&&)(&x)
-> (&)(a)
-> &a
2: &a
-> b
%put &&&&x;
1: &&&&x
-> (&&)(&&) (x)
-> (&)(&)(x)
-> &&x
2: &&x
-> (&&)(x)
-> (&)(x)
-> &x
2: &x
-> a
%put &&&&&x;
1: &&&&&x
-> (&&)(&&)(&x)
-> (&)(&)(a)
-> &&a
2: &&a
-> (&&)(a)
-> (&a
)
3: &a
-> b
%put &&&&&&x;
1: &&&&&&x
-> (&&)(&&)(&&) (x)
-> (&)(&)(&)(x)
-> &&&x
2: &&&a
-> (&&)(&x)
-> (&a
)
3: &a
-> b
Four ampersands is the most interesting to me, since adding one actually takes you back a step, effectively.
See my answer on sas MACRO ampersand for more detail.
You may need an extra & in your path specification, so that it resolves to "(hidden_tns_dev)" instead of "ALIASDEV", like this: path="&&&my_environment" .