SAS宏,将值作为字符串传递给where子句

SAS宏,将值作为字符串传递给where子句,sas,sas-macro,Sas,Sas Macro,下面有一个SAS宏不起作用——这个代码段不返回任何值,因为where语句不起作用。有人有什么想法吗?我尝试添加%str,但也不起作用 %macro refreshments(beverage_type=); proc sql; select * where drink_type = '&beverage_type.' ; quit; %mend %refreshments(Sprite); 谢谢。宏变量将不会在单引号中解析。您还缺少FROM子句,宏参数是作为位置(而不是名称=

下面有一个SAS宏不起作用——这个代码段不返回任何值,因为where语句不起作用。有人有什么想法吗?我尝试添加%str,但也不起作用

%macro refreshments(beverage_type=);

proc sql;
select

*

where drink_type = '&beverage_type.'
;
quit;

%mend

%refreshments(Sprite);

谢谢。

宏变量将不会在单引号中解析。您还缺少FROM子句,宏参数是作为位置(而不是名称=值对)提供的。请尝试以下操作:

%macro refreshments(beverage_type=);
  proc sql;
  select * 
    from YOURTABLE
    where drink_type = "&beverage_type";
%mend;

%refreshments(beverage_type=Sprite);

您的SQL缺少“from”子句。您需要指定要查询的表的名称。将来,如果宏无法正常工作,请尝试删除宏代码并将其作为常规SAS代码运行。一旦成功,请重新添加宏代码。您还将单引号更改为双引号,这将产生差异。注意,如果您使用传递到某些DBMS,这将不起作用(在使用双引号括起列名时,不允许以这种方式使用双引号)。例如,见。