全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3252 2
2015-08-01
下面是我想重命名得到的变量,重命名前每个变量后面都有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);


二维码

扫码加我 拉你入群

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

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

全部回复
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);

二维码

扫码加我 拉你入群

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

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

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

扫码加我 拉你入群

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

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

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

说点什么

分享

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