dxystata 发表于 2014-12-10 07:59 
17 %vars(%str(round((sbpl1_1+sbpl1_2+sbpl1_3)/3,1)))
ERROR: %SYSFUNC 或 %QSYSFUNC 宏函数引用的函 ...
%macro vars(expression);
%if %sysfunc(index(&expression,%str(%))))>0 %then %let expression=%sysfunc(prxchange(s/.*\((.*)\)\/.*/$1/,-1,&expression));
%let id=%sysfunc(prxparse(/[a-zA-Z]+\d?\_?\d?/));
%let s=1;
%let position=0;
%let length=0;
%let e=%sysfunc(length(&expression));
%syscall prxnext(id,s,e,expression,position,length);
%do %while(&position >0);
%let var=%sysfunc(substr(&expression,&position,&length));
%put &var;
%syscall prxnext(id,s,e,expression,position,length);
%end;
%mend;
%vars(%str(age+10=age2))
%vars(%str(age=50 & sex=1))
%vars(%str(round((sbpl1_1+sbpl1_2+sbpl1_3)/3,1)))
%vars(%str(sbpl1=round((sbpl1_1+sbpl1_2+sbpl1_3)/3,1)))