这里是一个宏观的例子:
/* tell macro language to recognise the in operator */
options minoperator;
/* demo data */
data test_yymm; column1=1;run;
data test_quarter; column1=1;run;
%macro demo(var) ;
/* remove quotes, place not outside the condition */
%if not (&var in quarter period year) %then %do;
proc sort data=test_&var.;
by descending column1;
run;
%end;
%mend;
/* call macro */
%demo(yymm);
%demo(quarter);
你也可以做到这一点在数据一步,通过调用call execute
:
%let var=yymm;
data _null_;
if "&var" not in ('quarter' 'period' 'year') then do;
call execute("
proc sort data=test_&var.;
by descending column1;
run;
");
end;
run;
请记住,SAS宏语言是基于文本的,所以变量不需要被引用。与常规SAS代码不同,字符串文字DO需要被引用以便被识别。
您需要使用宏逻辑代替if/then变为%if if%then,但是您还需要使用一个宏,完全包装它。 – Reeza
是@Reeza我试过,但返回一个错误,说:“操作数中找到一个字符操作数是必需的。” 是否需要一些额外的代码让SAS读取具有宏变量的if语句正确? – Wolfspirit
下面的答案是非常彻底的。一般来说,如果你说某件事情没有显示任何代码,那么你不可能得到任何帮助,因为我们不知道什么是错的。 – Reeza