全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
6547 7
2014-02-21
在论坛里学习了批量修改SAS数据集的方法,如下:

proc sql;                                                                                                                              
create table b as select * from dictionary.columns                                                                                      
where libname="WORK" and memname="ONE181";                                                                                             
quit;  /*提取数据集所有变量生成b*/                                                                                                      
                                                                                                                                       
proc sql;                                                                                                                              
select count(*) into:n from b;                                                                                                         
quit; /*计算变量个数,赋值给宏变量n*/                                                                                                   
                                                                                                                                       
proc sql;                                                                                                                              
select name into: var1-:var%left(&n) from b;                                                                                            
quit; /*将全部变量赋给n个宏变量*/                                                                                                      
                                                                                                                                       
%macro rename;                                                                                                                          
data one18;                                                                                                                             
set one181;                                                                                                                             
%do i=1 %to &n;                                                                                                                        
rename &&var&i=&&var&i.._18;                                                                                                            
%end;                                                                                                                                   
run;                                                                                                                                    
%mend; /*宏循环*/                                                                                                                       
%rename  

但是结果one18仅将最后一个变量名加上了"_18",请教这是为什么呢?先谢谢啦!

二维码

扫码加我 拉你入群

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

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

全部回复
2014-2-21 23:32:03
rename %do i=1 %to &n;                                                                                                                        
&&var&i=&&var&i.._18                                                                                                         
%end;  ;  
rename 写在外面试试
二维码

扫码加我 拉你入群

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

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

2014-2-22 11:56:39
SAS macro is not very easy to master.

As a beginner I would suggest one OLD way and It is always easy to understand. This is a way to write a dynamic programs before SAS introduces its macro language.

data _null_;
   set sashelp.class;
   array _nvar(*) _numeric_;
   array _char(*) _character_;
   file 'c:\temp\rename.sas';
   do i=1 to dim(_nvar);
   _name=vname(_nvar(i));
   put _name '=' _name +(-1) '_new';
   end;
   do i=1 to dim(_char);
   _name=vname(_char(i));
   put _name '=' _name +(-1) '_new';
   end;
   stop;
   run;


option source2;
data newname;
  set sashelp.class;
  rename %include 'c:\temp\rename.sas';
  ;
run;

proc print data=newname;
run;

data tmp;
  set sashelp.class;
  run;

proc datasets;
modify tmp;
rename
%include 'c:\temp\rename.sas';
;
quit;

proc print data=tmp;
run;
二维码

扫码加我 拉你入群

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

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

2014-2-23 08:58:48
bobguy 发表于 2014-2-22 11:56
SAS macro is not very easy to master.

As a beginner I would suggest one OLD way and It is always  ...
dynamic program好像更难啊…学习!!
二维码

扫码加我 拉你入群

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

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

2019-9-22 10:50:06
bobguy 发表于 2014-2-22 11:56
SAS macro is not very easy to master.

As a beginner I would suggest one OLD way and It is always  ...
Could you please explain what dose it mean by " 'c:\temp\rename.sas' "?
When I run this procedure it was logged that 'c:\temp\rename.sas' couldn't be find.
二维码

扫码加我 拉你入群

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

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

2019-10-29 16:01:47
百日梦想家 发表于 2019-9-22 10:50
Could you please explain what dose it mean by " 'c:\temp\rename.sas' "?
When I run this procedure ...
" 'c:\temp\rename.sas' " is the address of the file "rename.sas".it is not exsit on your computer.
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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