2017-06-15 2047 views
1

我写了一个简单的宏,并将其应用于一个简单的SAS数据步骤,以说明我正在查看输出的问题。如何输出SAS宏变量值

宏:

%macro test_func(var=); 
%put &var; 
%mend; 

数据步:

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

我的问题是,我看到输出只是字符串value,而不是他的名字等于变量保存的值串。

我相信我对SAS为什么这样做有一个模糊的理解,但我不知道如何让它达到期望的值(即在这种情况下为0)。那么,我将如何能够实现这一功能?

谢谢!

回答

2

问题在于%putput之间的差异。

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

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

因此我会改写这个:

%macro test_func(var=); 
put &var.; 
%mend; 

现在这个工作,你希望:

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

(注意另外一个微小的变化 - 去除%test_func;后的 - 它是不必要的,虽然通常不是什么大问题,但如果你习惯于把它放在那里,就会造成问题。)

+0

+1。谢谢@Joe!像往常一样,你的答案很简单,但很清楚,很有教育意义 - 我每次都会学到一些东西!但有一个问题:我对输出变量值的主要兴趣是解决宏问题。通过这种方法,我会在我正在排除故障的宏中有多个非宏语句,从而导致其他错误。所以我仍然想知道如何继续。我可以在这里问另一个问题,但我想至少尝试自己弄清楚。你会推荐什么?再次感谢! – Rookatu

+0

这真的取决于你在做什么。但最终,宏语言('%put'等)不能访问实际值;所以你必须弄清楚如何以不会导致问题的方式将调试语句放在那里。我经常做的一件事就是在主代码体中包含调试代码(不管它实际上是否在宏中),然后包含检查变量'&debug'的'%if'块 - 如果'&debug = Y'则运行调试代码。 – Joe