楼主: yukai08008
6438 5

[程序分享] 数据集变量名批量重命名_SAS宏代码_Andy的原创帖26 [推广有奖]

  • 2关注
  • 17粉丝

已卖:19份资源

讲师

2%

还不是VIP/贵宾

-

威望
0
论坛币
2176 个
通用积分
3.0600
学术水平
10 点
热心指数
7 点
信用等级
7 点
经验
5915 点
帖子
120
精华
0
在线时间
556 小时
注册时间
2012-11-28
最后登录
2022-4-11

楼主
yukai08008 在职认证  发表于 2016-10-13 01:15:06 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

以下几个宏连着用,可以把一个数据集的名称根据连续和分类变量映射为新的名称。可以避免变量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;

二维码

扫码加我 拉你入群

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

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

关键词:批量重命名 数据集变量 SAS宏 Andy 数据集 sas 批量修改变量名

沙发
prince315(未真实交易用户) 在职认证  发表于 2016-10-14 13:59:15
所以是说批量的将长度已经超过32的数据集中的变量名,统一做一个映射成较短的变量名,方便之后的处理么?
可能需要考虑下使用场景,不过多谢分享,其中还是很多小块值得学习借鉴的。

藤椅
prince315(未真实交易用户) 在职认证  发表于 2016-10-14 13:59:19
所以是说批量的将长度已经超过32的数据集中的变量名,统一做一个映射成较短的变量名,方便之后的处理么?
可能需要考虑下使用场景,不过多谢分享,其中还是很多小块值得学习借鉴的。

板凳
prince315(未真实交易用户) 在职认证  发表于 2016-10-14 13:59:29
所以是说批量的将长度已经超过32的数据集中的变量名,统一做一个映射成较短的变量名,方便之后的处理么?
可能需要考虑下使用场景,不过多谢分享,其中还是很多小块值得学习借鉴的。

报纸
prince315(未真实交易用户) 在职认证  发表于 2016-10-14 14:03:23
上面重复楼层是提交时长期未反应导致,请删除= =!

地板
yukai08008(未真实交易用户) 在职认证  发表于 2016-10-14 22:28:37
prince315 发表于 2016-10-14 13:59
所以是说批量的将长度已经超过32的数据集中的变量名,统一做一个映射成较短的变量名,方便之后的处理么?
...

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 08:12