sas将引用的字符串传递给宏

时间:2016-06-15 21:42:01

标签: sas sas-macro

所以我有一个数据集,其元素是引号中的电子邮件串。单个数据元素可能如下所示: " john@cool.com" " jacob@cool.com" " jingleheimer@cool.com" " smith@cool.com"

我有以下宏命令和数据步骤:

%macro Emailer(RCP=);
/* body of the e-mail*/
data _null_;
    file tmp;
    put "Hello, World! <BR>";
run;

/*to-from*/
Filename tmp Email
Subject="Hello World Test"
To= (&RCP)
CT= "text/html";
%mend Emailer;

data _null_;
    set EmailLists;
    call execute('%Emailer(RCP='||ListOfEmails||')');
run;

但我一直得到&#34;错误:宏参数包含语法错误。&#34;

是因为我的数据元素有空格或引号,还是两者都有?

提前致谢。

1 个答案:

答案 0 :(得分:1)

测试它的一种方法是直接传递参数,而不是数据步骤。首先,我将重新排列声明的顺序,正如评论者指出的那样。

%macro Emailer(RCP=);
  filename myEmail Email;
  data _null_;
    file myEmail Subject = "Hello World Test"
                 To = (&RCP)
                 CT = "text/html";
    put "Hello, World! <BR>";
  run;
  filename myEmail clear;
%mend Emailer;

尝试完成其中任何一项工作(不能让我的64位SAS与我的32位Outlook一起工作,这样我就无法测试其中任何一项):

%Emailer(RCP="john@cool.com" "jacob@cool.com" "jingleheimer@cool.com")
%Emailer(RCP="john@cool.com jacob@cool.com jingleheimer@cool.com")
%Emailer(RCP=john@cool.com jacob@cool.com jingleheimer@cool.com)
%Emailer(RCP=john@cool.com ; jacob@cool.com ; jingleheimer@cool.com)

在你弄清楚哪种形式有效之后,剩下的就应该很容易了。