如果要对多个变量同时作分析(n个变量求和),使用proc means的时候会有var= sum=选项,以下宏实现用同步功能:
给出var以及期望的后缀,为所有变量生成对应尾缀。
如 var= a b c d sum=a_s b_s c_s d_s
调用宏: %vname(a b c,name)
&name 中会存放 a_s b_s c_s d_s
****************************************************************************
%macrovname(ins,ous,ped=s,address=E:\数据结果\tem.txt);
/*输出必须为宏变量,否则宏外无法调用*/
%global &ous;
/*获取变量组*/
dataa1;
long=symget('ins');
run;
/*输出文本*/
data_null_;
lengthlong $ 2000;
file "&address" lrecl=2000;
seta1;
putlong;
run;
/*读入文本,添加后缀*/
dataa2;
lengthshort $ 20;
infile"&address" lrecl=2000;
inputshort $ @@;
tem="&ped";
shorts=cats(short,'_',left(tem));
tlen=length(shorts);
run;
/*计算变量个数,长度,以及输出变量的长度*/
dataa3;
seta2 end=last;
vars+1;
lens+tlen;
iflast then do;
lr=vars*2+lens;
callsymput('vars',vars);
callsymput('lens',lens);
callsymput('lr',lr);
end;
run;
/*转置*/
proctranspose data=a3 out=a4;
varshorts;
run;
/*循环连接*/
dataa5;
lengthovar $ &lr;
seta4;
arraycol[&vars] $ col1-%sysfunc(cats(col,&vars));
doi=&vars to 1 by -1;
ovar=catx(' ',col,ovar);
end;
callsymput("&ous",ovar);
run;
procdelete data= a1 a2 a3 a4 a5;
run;
%mend;