我无法弄清楚如何将条件宏传递给数据集变量的值。假设我们有:
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;
它只是一个例子,当然它几乎没用。
答案 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;