2016-11-12 91 views
0

我正在为一个学校作业编写一个宏,它将把一个航空公司的名称传递给宏,我相信它与字符串和“and”缺少关系,但是它不会运行。请告诉我,我做错了。在SAS宏中传递参数

%macro select airine=; 

proc means data=mytables.airtraffic noprint ; 
where bosflights gt 0 and bospassengers gt 0; 
by &airline; 
var bosflights bospassengers; 
output out=mytables.bosflightsairport sum (bosflights bospassengers)= flights passengers;` 
run; 
%mend select; 
%select airline = Envoy Air; 
+0

我固定的,但仍然有错误22-322:语法错误,需要下列之一:名称,;,降,NOTSORTED,_ALL_,_CHARACTER_,_CHAR_, _NUMERIC_。 – kahunabee

回答

2

你缺少()在你的宏定义和调用。

%macro select(airline=); 
... 
%mend select; 
%select(airline = Envoy Air); 

你在变量名传递或变量的值?你现在编写的方式是传递两个变量您要使用名称ENVOYAIR将AIRTRAFFIC数据集中的数据分组。

如果您的意思是用于数据子集的参数值,那么假设您在数据集中有一个名为AIRLINE的变量,那么您可能需要像这样的变量作为宏的主体。

proc means data=mytables.airtraffic noprint ; 
    where bosflights gt 0 and bospassengers gt 0; 
    where also airline="&airline"; 
    var bosflights bospassengers; 
    output out=mytables.bosflightsairport 
     sum(bosflights bospassengers)= flights passengers 
    ;` 
run;