如何在 SAS 宏中向用户询问字符串参数?
How do you ask a user for a string param in a SAS macro?
我正在尝试计算用户的描述性统计信息。该宏采用 'type' 参数。该类型是一个字符串,稍后将在代码中使用。
%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 ...
我知道我为什么会收到错误消息。但我不明白为什么字符串 'mean' 没有被替换。
宏参数没有类型。宏参数中没有'numeric'或'character'。它们也不应该有引号,除非在最终代码中需要引号。宏变量(和参数)只是文本替换 - 所以如果您要在代码中键入 '
然后包含它(或者更好的是,将 "
放在参数周围);否则不要。
%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 中没有任何意义。
SAS 宏语言基本上是复杂的 copy/paste。它只处理字符串,这使得引用与 data
步引用非常不同。当您通过宏传递值 'mean'
时,它会传递引号。
对于 SAS,它正在查看:
proc means data = test 'mean'$;
...
run;
告诉 PROC MEANS
只计算平均值的语法不正确。相反,您只想传递不带引号的单词 mean
(或 $ 符号;PROC MEANS
中不需要 $ 符号)。然后 SAS 将看到:
proc means data=test mean;
...
run;
有关宏引用的详细信息,请查看 this article。
我正在尝试计算用户的描述性统计信息。该宏采用 'type' 参数。该类型是一个字符串,稍后将在代码中使用。
%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 ...
我知道我为什么会收到错误消息。但我不明白为什么字符串 'mean' 没有被替换。
宏参数没有类型。宏参数中没有'numeric'或'character'。它们也不应该有引号,除非在最终代码中需要引号。宏变量(和参数)只是文本替换 - 所以如果您要在代码中键入 '
然后包含它(或者更好的是,将 "
放在参数周围);否则不要。
%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 中没有任何意义。
SAS 宏语言基本上是复杂的 copy/paste。它只处理字符串,这使得引用与 data
步引用非常不同。当您通过宏传递值 'mean'
时,它会传递引号。
对于 SAS,它正在查看:
proc means data = test 'mean'$;
...
run;
告诉 PROC MEANS
只计算平均值的语法不正确。相反,您只想传递不带引号的单词 mean
(或 $ 符号;PROC MEANS
中不需要 $ 符号)。然后 SAS 将看到:
proc means data=test mean;
...
run;
有关宏引用的详细信息,请查看 this article。