Stored procedures sas存储进程中的宏变量

Stored procedures sas存储进程中的宏变量,stored-procedures,sas,Stored Procedures,Sas,我有SAS的代码 proc sql; create test as select * from test2 where user_name = &username;quit; 当我使用%let username=Bob在SAS中运行时,它运行正常。 但我需要使用存储进程运行它(变量username是connected user中的内部参数,我从sas存储进程代码中删除%let username=Bob)。 存储的进程制动器出现错误 在日志文件中,我看到变量: \u username=B

我有SAS的代码

proc sql;
create test as select * from test2 where user_name = &username;quit;
当我使用
%let username=Bob在SAS中运行时,它运行正常。
但我需要使用存储进程运行它(变量username是connected user中的内部参数,我从sas存储进程代码中删除
%let username=Bob
)。 存储的进程制动器出现错误

在日志文件中,我看到变量:


\u username=Bob
但存储进程中的代码找不到它。如何在SAS存储过程代码中使用此变量?谢谢大家!

在您自己的SAS代码中,您使用宏变量
username
,但在存储过程中,用户名可在保留的宏变量
\u username
中使用。下划线实际上是变量名的一部分,因此您应该编写
&\u username

有关更多信息,您可以阅读或在插入后查阅日志

%put _automatic_;
在代码中,打印SAS为您提供的所有宏变量


备注:由于存储进程中的自动宏变量不同于本地SAS会话中的自动宏变量,如果您想在两者中使用相同的代码,通常需要一些
%if%then%else
逻辑。

在您自己的SAS代码中,您使用宏变量
username
,但在存储进程中,用户名在保留宏变量
\u username
中可用。下划线实际上是变量名的一部分,因此您应该编写
&\u username

有关更多信息,您可以阅读或在插入后查阅日志

%put _automatic_;
在代码中,打印SAS为您提供的所有宏变量

备注:由于存储进程中的自动宏变量与本地SAS会话中的自动宏变量不同,如果您想在这两个会话中使用相同的代码,通常需要一些
%if%then%else
逻辑