'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 代码中。
注意它有昨天的星期几和日期。这是因为自动宏变量 SYSDAY
和 SYSDATE
是在 SAS 启动时设置的 运行ning 并且我 运行 在我昨天启动的 SAS 会话中编写了这段代码。
我对 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 代码中。
注意它有昨天的星期几和日期。这是因为自动宏变量 SYSDAY
和 SYSDATE
是在 SAS 启动时设置的 运行ning 并且我 运行 在我昨天启动的 SAS 会话中编写了这段代码。