在数据步 SAS 中多次调用宏变量

Call macro variables multiple times within data step SAS

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

%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 对的数据集?

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

%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;

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