【问题标题】:Call macro variables multiple times within data step SAS在数据步 SAS 中多次调用宏变量
【发布时间】:2017-02-23 19:25:52
【问题描述】:

我正在尝试比较多个不同变量是否按照我期望使用宏的顺序发生。我的代码是:

%macro Order (second,first,var);
data order;
set data;
if &second. > &first. then &var._Correct = 1; else &var._Correct = 0;
if &second. < &first. then &var._Error = 1; else &var._Error = 0;
run;
%mend order;
%order(B,A,AB);
%order(C,B,BC);

我还有很多其他变量要比较。问题是,当我运行宏时,输出数据集只有最后一对。在这个例子中,那将是 BC。我知道我可以制作多个输出数据集,每个输出数据集都有成对,但是我必须将它们重新连接在一起。如何获得一个包含所有 &var._Correct 和 &var._Error 对的数据集?

【问题讨论】:

    标签: sas sas-macro


    【解决方案1】:

    您的问题是您要重写数据步骤两次。这是不需要的。大多数时候,像这样的宏可以是数据步骤中的行,而不是整个数据步骤。

    %macro Order (second,first,var);
    if &second. > &first. then &var._Correct = 1; else &var._Correct = 0;
    if &second. < &first. then &var._Error = 1; else &var._Error = 0;
    %mend order;
    
    data order;
    set data;
    %order(B,A,AB);
    %order(C,B,BC);
    run;
    

    类似的东西。我会在这里指出一些小问题。如果 &second=&first 怎么办?你想要没有正确也没有错误,或者是正确还是错误?

    还有一种更简单的方法:

    %macro Order (second,first,var);
      &var._correct = (&second. > &first.); *or GE?;
      &var._error   = (&second. < &first.); *or LE?; *only one of these two;
    %mend order;
    

    这样可以用更少的代码将相同的值放入变量中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多