BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
zdeb15
Calcite | Level 5

I am using SAS metadata to create a SAS macro called &SASAdmin....This macro will be used to store all the sas admin email address so I can send an email to all the SASAdmins. I want to dynamically set the value so I don't have to constantly manage the "TO" email address if an employee leaves or a new employee is hired. This code works if in the TO: line is hard coded such as

' 'email1@test.org "email2@test.org" ' 

 

but does not work if i put 

 

TO  "&SASAdmin"

 

 

Code is below:

 

 

options emailsys=smtp emailhost=smtp.test.org emailport=25;
FILENAME output EMAIL
SUBJECT= "SAS PROGRAM ERROR"
FROM= "test@test.org"
TO= "&SASAdmin"
importance='high'
CT= "text/html" /* Required for HTML output*/;
ODS HTML BODY=output STYLE=minimal;
title "<div align='Center' style ='font-size:12pt'> SAS PROGRAM ERROR TEST</div>";
footnote "<div style = 'font-size:10pt'> This E-mail is auto-generated from SAS on &sysday, &sysdate9.</div>";
footnote2 "<div style = 'font-size:10pt'> on the &sysscp system using Release &sysver </div>";

proc report data=enviromentspecs;
column programowner programpath lastruntime errortext;
define programowner / display;
define programprath / display;
define lastruntime / display;
define errortext / display;
label
programowner = 'Program Owner'
programpath = 'Program Path'
lastruntime = 'Program Last Run Time'
errortext = 'Program Error Text';
run;

 

 

 

errors:

 

ERROR 23-2: Invalid option name SASAdmin.
ERROR: Error in the FILENAME statement.
ERROR: No logical assign for filename OUTPUT.
ERROR: No body file. HTML output will not be created.

 

1 ACCEPTED SOLUTION

Accepted Solutions
Kurt_Bremser
Super User

When the macro variable that contains

"test1@test.org""test2@test.org""test3@test.org"

is resolved in this

TO= "&SASAdmin"

you get

TO= ""test1@test.org""test2@test.org""test3@test.org""

This can't work. A list of email recipients needs to be enclosed in parentheses (see the documentation), so you should use

TO=(&SASAdmin)

View solution in original post

6 REPLIES 6
zdeb15
Calcite | Level 5

Replicated code below: 

 

 

 

data temp;
infile DATALINES;
length emailaddr $20.;
input keyid$ emailaddr$ displayname$;
CARDS;
1 test1@test.org test1
2 test2@test.org test2
3 test3@test.org test3
;
run;
data temp1; set temp;

first = '"';
second = '"';

Email = catx('',first,emailAddr,second);
Email1 = compress(email);
TextList = 'NULL';
Team = 'SAS';
LastUpdateDt = datetime();
format LastUpdateDt datetime22.3;

run;
data temp2;

length emaillist $10000.;

do until (last.team);
set temp1;
by team notsorted;
emaillist=cats(emaillist,'',Email1);
end;
drop Email1 emailaddr first second email displayname keyid ;

run;
data _null_; set work.temp2;
call symput ('SASAdmin1',emaillist);
run;
%put sas admins are &SASAdmin1;

 

LOG:

%put sas admins are &SASAdmin1;
sas admins are "test1@test.org""test2@test.org""test3@test.org"

zdeb15
Calcite | Level 5

The code above is replicated (I changed the sasadmin to sasadmin1) but in the original code use SASADMIN and create SASADMIN. I did this to de-identify the actual email address of the recipients of the email but still be able to provide you with sample code that matches the original.  

Kurt_Bremser
Super User

When the macro variable that contains

"test1@test.org""test2@test.org""test3@test.org"

is resolved in this

TO= "&SASAdmin"

you get

TO= ""test1@test.org""test2@test.org""test3@test.org""

This can't work. A list of email recipients needs to be enclosed in parentheses (see the documentation), so you should use

TO=(&SASAdmin)
data_null__
Jade | Level 19
Show the value of &SASADMIN. Also include meaningful LOG output.

SAS Innovate 2025: Register Now

Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 6 replies
  • 1883 views
  • 0 likes
  • 3 in conversation