'Hello World' 在带有宏的 SAS 中给出语法错误

'Hello World' in SAS with a macro gives syntax error

我对 SAS 世界非常陌生,所以我很自然地尝试编写我的 'Hello World'。这是我的 MWE,它给我语法错误:

/* SAS Hello World Program */

    /*Macro with date*/
    %Macro datum;
    Title "Hello World, today is &Sysday, &Sysdate";
    %Mend datum;

    /*Create Hello World Data Set */     
    data HelloWorld;
    msg = %datum ;
    run;

    /*Print Hello World*/
    proc print data = HelloWorld;
    run;

它不打印 'Hello Wolrd' 消息,而是给出一个我不理解的语法错误。在 Log 中出现消息,因此原则上它可以工作 - 只是打印步骤没有。有什么想法吗?

你有它作为标题,所以你不能将它用于赋值变量,如果你是初学者那么请使用

/* this will print in log*/
data _null_;
put "hello world";
run;

/* or use in datastep by making variable or by using macrovariable*/
%let a= Hello World, today is &Sysday, &Sysdate;
data have;
var= "Hello world";
var2= "&a";
run;


proc print data = have;
run;

您创建的宏会生成一个 TITLE 语句。所以它应该可以正常工作。

但是您的程序在错误的地方使用了它。一旦您的宏 运行s 并完成生成 TITLE 语句的文本,您的数据步骤将如下所示:

data HelloWorld;
  msg = Title "Hello World, today is Thursday, 10JAN19"; ;
run;

这显然会出错,因为赋值语句的右侧现在有两个标记,一个名为 TITLE 的变量和一个字符串常量,它们之间没有任何运算符。额外的分号只会生成一个额外的空语句,不会造成任何问题。

也许您想创建一个宏 VARIABLE 而不是实际的宏?

要做到这一点,您的程序看起来会更像这样。

%let msg=Hello World, today is &Sysday, &Sysdate ;

data HelloWorld;
  msg = "&msg." ;
run;

因此,当替换宏变量引用时,此 SAS 代码的计算结果为 运行。

data HelloWorld;
  msg = "Hello World, today is Thursday, 10JAN19" ;
run;

注意如何使用 & 触发宏变量的计算。另请注意,我没有将引号添加到宏变量的值,而是将它们包含在使用宏变量的值生成的 SAS 代码中。

注意它有昨天的星期几和日期。这是因为自动宏变量 SYSDAYSYSDATE 是在 SAS 启动时设置的 运行ning 并且我 运行 在我昨天启动的 SAS 会话中编写了这段代码。