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

在数据步骤SAS中多次调用宏变量,sas,sas-macro,Sas,Sas Macro,我试图比较是否有许多不同的变量按照我希望使用宏的顺序发生。我的代码是: %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 &v

我试图比较是否有许多不同的变量按照我希望使用宏的顺序发生。我的代码是:

%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。我知道我可以创建多个输出数据集,每个数据集都有一对,但是我必须将它们重新连接在一起。如何获得一个包含所有my&var.\u Correct和&var.\u 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;
这将以更少的代码将相同的值放入变量中