【问题标题】:How to output SAS Macro variable value如何输出 SAS 宏变量值
【发布时间】:2017-06-15 19:50:27
【问题描述】:

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

宏:

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

数据步骤:

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

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

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

谢谢!

【问题讨论】:

    标签: sas sas-macro


    【解决方案1】:

    问题在于%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 之后删除; - 这是不必要的,虽然通常没什么大不了的,但如果你习惯把它放在那里,它可能会导致问题。)

    【讨论】:

    • +1。谢谢@乔!像往常一样,你的回答简短而清晰,很有启发性——我每次都学到一些东西!但是有一个问题:我对输出变量值的主要兴趣是对我的宏进行故障排除。使用这种方法,我将在我正在排除故障的宏中有多个非宏语句,从而导致其他错误。所以我想知道如何进行。我可以在这里问另一个问题,但我想至少尝试自己解决问题。你会推荐什么?再次感谢!
    • 这真的取决于你在做什么。但最终,宏语言(%put 等)无法访问实际值;所以你必须弄清楚如何以不会引起问题的方式将调试语句放在那里。我经常做的一件事是在主代码体本身中包含调试代码(无论它实际上是否在宏中),然后包含检查变量&debug%if 块 - 如果&debug=Y 然后运行调试代码。
    猜你喜欢
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多