如何让用户在SAS宏中询问字符串参数?

时间:2015-09-29 18:40:38

标签: sas sas-macro

我试图为用户计算描述性统计数据。宏采用'类型'参数。该类型是一个字符串,稍后将在代码中使用。

%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 ...

我知道为什么我会收到错误。但我不明白为什么字符串'意思是'没有被替换。

2 个答案:

答案 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