全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
6389 5
2016-10-13

以下几个宏连着用,可以把一个数据集的名称根据连续和分类变量映射为新的名称。可以避免变量32个字节的尴尬。处理完再映射回原变量名称即可。
macros.txt
大小:(1.52 KB)

只需: 1 个论坛币  马上下载









%macro mvlist(inset,outset=vlist,inlib=WORK,outlib=WORK);
%nlev(&inset)
proc sql noprint;
create table tem as
select name,type
from sashelp.vcolumn
where libname=upper("&inlib") and memname=upper("&inset");
quit;
data tem1;
set nlev;
name=tablevar;
levs=nlevels;
keep name levs;
run;

%mer(tem,tem1,name,tem2)
data  tem3;
set tem2;
if type eq 'char' or levs le 10 then vtype='c';
else vtype='v';
run;
%sort(tem3,vtype,name)
data &outlib..&outset;
set tem3;
by vtype;
if first.vtype then cnt=0;
if name not in ('id','target') then do;
cnt+1;
vname=cats(vtype,cnt);
end;
drop cnt;
run;
%mend;


/****************************************将数据集重新命名***************************************************/

/*先将vlist中的数据生成关键语句*/
%macro mrules(ins=vlist,fname=name,tname=vname);
data mrul;
length sen $ 1000;
sen='';
stop;
run;
data ntem;
set &ins;
if name not in ('id','target');
run;
data _null_;
if 0 then set ntem nobs=n;
call symput('obs',n);
run;
%do i=1 %to &obs;
data tem;
set ntem;
if _n_=&i;
call symput('fn',&fname);
call symput('tn',&tname);
run;
data tem1;
length sen $ 1000;
sen=catx(' ','rename',"&fn",'=',"&tn",';');
run;
proc append base=mrul  data=tem1 force;
run;
%end;
%mend;

/*根据sen生成关键语句,对inset处理,生成ouset*/
%macro mgfile(inset,ouset,sen=mrul,path=e:\test.sas);
filename new "&path";
data _null_;
file new;
set &sen end=last;
if _n_=1 then put "data &ouset; set &inset;";
put sen;
if last  then put 'run;';
run;
%include "&path";
%mend;

二维码

扫码加我 拉你入群

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

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

全部回复
2016-10-14 13:59:15
所以是说批量的将长度已经超过32的数据集中的变量名,统一做一个映射成较短的变量名,方便之后的处理么?
可能需要考虑下使用场景,不过多谢分享,其中还是很多小块值得学习借鉴的。
二维码

扫码加我 拉你入群

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

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

2016-10-14 13:59:19
所以是说批量的将长度已经超过32的数据集中的变量名,统一做一个映射成较短的变量名,方便之后的处理么?
可能需要考虑下使用场景,不过多谢分享,其中还是很多小块值得学习借鉴的。
二维码

扫码加我 拉你入群

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

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

2016-10-14 13:59:29
所以是说批量的将长度已经超过32的数据集中的变量名,统一做一个映射成较短的变量名,方便之后的处理么?
可能需要考虑下使用场景,不过多谢分享,其中还是很多小块值得学习借鉴的。
二维码

扫码加我 拉你入群

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

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

2016-10-14 14:03:23
上面重复楼层是提交时长期未反应导致,请删除= =!
二维码

扫码加我 拉你入群

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

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

2016-10-14 22:28:37
prince315 发表于 2016-10-14 13:59
所以是说批量的将长度已经超过32的数据集中的变量名,统一做一个映射成较短的变量名,方便之后的处理么?
...
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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