我试图为用户计算描述性统计数据。宏采用'类型'参数。该类型是一个字符串,稍后将在代码中使用。
%macro descriptive_stats(data, reqvar, type, filter);
proc means data = &data &type$;
var &reqvar;
by &filter;
run;
%mend descriptive_stats;
%descriptive_stats(test, &num_var, 'mean', fyear)
我收到以下错误:
Syntax error, expecting one of the following: ;, (, ALPHA, CHARTYPE ...
我知道为什么我会收到错误。但我不明白为什么字符串'意思是'没有被替换。
答案 0 :(得分:3)
宏参数没有类型。宏参数中没有“数字”或“字符”。除非最终代码中需要引号,否则它们也不应该有引号。宏变量(和参数)只是文本替换 - 所以如果你在代码中输入'
然后包含它(或者更好的是,将"
放在参数周围);否则不会。
%macro descriptive_stats(data, reqvar, type, filter);
proc means data = &data &type;
var &reqvar;
by &filter;
run;
%mend descriptive_stats;
%descriptive_stats(test, &num_var, mean, fyear)
我也不确定$
来自哪里 - 在这种背景下,SAS没有任何意义。
答案 1 :(得分:1)
SAS宏语言基本上是复杂的复制/粘贴。它只处理字符串,这使得引用与data
步骤引用非常不同。当您通过宏传递值'mean'
时,它会用它传递引号。
对SAS来说,它看到了:
proc means data = test 'mean'$;
...
run;
告诉PROC MEANS
仅计算均值的语法不正确。相反,您只想传递单词mean
而不带引号(或$符号; PROC MEANS
中不需要$符号)。然后SAS会看到:
proc means data=test mean;
...
run;
有关宏引用的详细信息,请查看this article。