sas将变量传递给条件宏

时间:2016-05-18 16:34:48

标签: sas sas-macro

我无法弄清楚如何将条件宏传递给数据集变量的值。假设我们有:

data HAVE;
    input id  name $ value ;
    datalines;
    1 pluto 111
    2 paperino 222
    3 trump 333
    4 topo 444
    ;
run;

我想在sas conditinal宏中使用数据集变量名来制作其他IF条件。

我的意思是在条件宏之前(或条件宏内部)使用此代码与另一个IF步骤

options minoperator mlogic;
  %macro test(var) / mindelimiter=',';

    %if &var in(pippo,pluto) %then %do; "if &var"n = name; end;
    %else %do;"mod &var"n = name;end;

  %mend test;

data want;
    set have;
    %test(pippo);
    %test(arj);
    %test(frank);
    %test(pluto);
    %test(george);
run;

例如:

options minoperator mlogic;
%macro test(var) / mindelimiter=',';

 if name = &var then do;

   %if &var in(pippo,pluto) %then %do "if &var"n = name; %end;
   %else %do; "mod &var"n = name; end;

 end;

%mend test;

但IF名称=& var始终为true ...在宏中使用名称数据集变量存在一些问题。

第一次回答后编辑

条件宏内部条件的示例代码:

%macro test(var) / mindelimiter=',';

 %if &var in(pippo pluto) %then %do; 
  if name = 'pluto' then ifif_&var. = name;
  if_&var. = name; 
  %end;
 %else %do; 
  mod_&var. = name; 
 %end;

%mend test;

它只是一个例子,当然它几乎没用。

2 个答案:

答案 0 :(得分:1)

以这种方式使用它并没有什么本质上的错误,尽管你的代码中有一些错误。

%macro test(var) / mindelimiter=',';

 if name = "&var" then do;

   %if &var in(pippo pluto) %then %do; if_&Var. = name; %end;
   %else %do; mod_&var. = name; %end;

 end;

%mend test;

这是有效的,或者至少就我所说的而言,可以说是你想要的。

答案 1 :(得分:0)

您希望从数据中生成代码。

data _null_;
  set have end=eof;
  if _n_=1 then call execute('data want;set have;');
  call execute(cats('%nrstr(%test)(',name,')'));
  if eof then call execute('run;');
run;