楼主: gotobest
3291 2

使用宏批量keep和rename [推广有奖]

  • 3关注
  • 1粉丝

硕士生

5%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
2 点
信用等级
0 点
经验
1060 点
帖子
61
精华
0
在线时间
117 小时
注册时间
2014-9-17
最后登录
2016-9-28

楼主
gotobest 发表于 2015-8-1 08:14:32 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
下面是我想重命名得到的变量,重命名前每个变量后面都有1或2或3或4,一共四组,我想把它们都重命名成下面这些后面不带数字的变量,然后可以把四个数据集都用set连接起来,请问怎么做?我用的是sas9.2 32位的软件,里面的&&var&j总是编译错。
AE
AEFL
AEKSSJ
AEJSSJ
AEYZCD
AETD
AETDCS
AETDSJ
AETDQT
AEZG
AEHYZ
AEJLYX
AECSCS
AECSQT
AESAE
AEHYGX
程序如下:
%let pub_var=DN CN DM;
options mprint mlogic;
data var;
input varname $;
cards;
AE
AEFL
AEKSSJ
AEJSSJ
AEYZCD
AETD
AETDCS
AETDSJ
AETDQT
AEZG
AEHYZ
AEJLYX
AECSCS
AECSQT
AESAE
AEHYGX
;
run;

proc sql;
select count(*)        into:n from var;
quit;
proc sql;
select varname into:var1-:var%left(&n) from var;
quit;       
%macro AE(OUT=AE_ALL);
%local j;
%do i=1 %to 4;
data AE&i;
set a.&dataset._fmt(keep=&pub_var &var1&i-&&var%left(&n)&i);
do j=1 to &n;
rename &&var&j.&i=&&var&j;
end;
group=1;
run;
proc append base=&OUT data=AE&i;
RUN;
%end;
data a.&OUT;
set  &OUT(where=(AE^='' and AE^='无'));
label group='不良事件编号';
RUN;
proc sort data=a.&OUT;
by cn dn group;
run;
%mend AE;
%AE(OUT=AE_ALL);


二维码

扫码加我 拉你入群

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

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

关键词:rename keep name ENA proc sql 程序 命名 软件

沙发
忍冬的秋 发表于 2015-8-1 16:23:06
这是我自己编的程序,可以正常跑通,请查阅
data a;
input AE1 AEFL2 AEKSSJ3 AEJSSJ4;
cards;
1 2 3 4
3 4 5 6
2 3 4 5
5 6 4 3
;
run;
%let var_name=
AE1
AEFL2
AEKSSJ3
AEJSSJ4
;
data test;
input var_name $;
cards;
AE1
AEFL2
AEKSSJ3
AEJSSJ4
;
run;
proc sql noprint;
select length(var_name) into :var_len1-:var_len4 from test;
quit;
%macro change(indata=,outdata=);
data _null_;
array abc{*} &var_name.;
call symput('var_length',dim(abc));
run;
data &outdata.;
set &indata.(
rename=
(
%do i=1 %to &var_length.;
%scan(&var_name.,&i.) = %sysfunc(substr(%scan(&var_name.,&i.),1,&&var_len&i-1))
%end;
)
);
run;
%mend change;
%change(indata=a,outdata=b);

藤椅
gotobest 发表于 2015-8-1 22:59:04
忍冬的秋 发表于 2015-8-1 16:23
这是我自己编的程序,可以正常跑通,请查阅
data a;
input AE1 AEFL2 AEKSSJ3 AEJSSJ4;
已经运行了,非常好,非常感谢哈!我就是不明白为啥我写的那个宏,宏变量解析不出来,有可能是版本的问题吗?因为,我之前用9.3 64位的sas可以解析出像&&var&i这样的变量来的。

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-29 22:18