全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2133 1
2016-02-17

如果要对多个变量同时作分析(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;


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2016-2-17 17:09:05
可以用间接引用的方式,看起来会好一些
%let idk=sas as d ga a ga as da;
%vname(&idk,mim)
%put &mim;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群