如何输出SAS宏变量值

如何输出SAS宏变量值,sas,sas-macro,Sas,Sas Macro,我编写了一个简单的宏,并将其应用于一个简单的SAS数据步骤,以说明我在查看输出时遇到的一个问题 宏: %macro test_func(var=); %put &var; %mend; 数据步骤: data test_data_step; value = 0; %test_func(var = value); run; 我的问题是,我看到的输出只是字符串值,而不是名称等于该字符串的变量中的值 我相信我对SAS这样做的原因有一个模糊的理解,但我不知道如何让它给出所需的值(在本例中为0)

我编写了一个简单的宏,并将其应用于一个简单的SAS数据步骤,以说明我在查看输出时遇到的一个问题

宏:

%macro test_func(var=);
%put &var;
%mend;
数据步骤:

data test_data_step;
value = 0;
%test_func(var = value);
run;
我的问题是,我看到的输出只是字符串
,而不是名称等于该字符串的变量中的值

我相信我对SAS这样做的原因有一个模糊的理解,但我不知道如何让它给出所需的值(在本例中为
0
)。那么,我如何才能实现这一功能呢


谢谢

问题在于
%put
put
之间的差异

是否要查看宏变量
&var
的内容?然后使用
%put(&var)

但是,如果要查看名称存储在
&var
中的SAS data step变量的内容,请使用
put(&var)

因此,我将重写以下内容:

%macro test_func(var=);
put &var.;
%mend;
现在,这项工作正如您所期望的那样:

data test_data_step;
  value = 0;
  %test_func(var = value)
run;

(请注意另一个小改动-在
%test\u func
之后删除
-这是不必要的,虽然通常不是什么大问题,但如果您习惯将其放在那里,可能会导致问题。)

+1。谢谢@Joe!和往常一样,你的回答简短明了,富有启发性——我每次都学到了一些东西!不过有一个问题:我输出变量值的主要兴趣是对宏进行故障排除。使用这种方法,我将在正在排除故障的宏中有多个非宏语句,从而导致其他错误。所以我想知道如何继续。我可以在这里问另一个问题,但我想至少自己想办法解决问题。你推荐什么?再次感谢!这真的取决于你在做什么。但最终,宏语言(
%put
等)无法访问实际值;因此,您必须弄清楚如何将调试语句放在那里,使其不会引起问题。我经常做的一件事是在主代码体本身中包含调试代码(不管它是否在宏中),然后包含检查变量的
&debug
块,如果
&debug=Y
,则运行调试代码。