全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2113 0
2013-12-31
使用SQL步或DATA步与Macro的结合,可以完成进行批量数据处理的要求。比如说对任意的数据集进行数据清洗,建模前变量的筛选等等。基本的思路都是从SAS的数据字典里面提取变量信息,然后针对提取的变量进行操作。首先列出SAS的数据字典,这些表只能用SQL过程访问。DICTIONARY.LIBNAMES–关于SAS逻辑库的一般信息
DICTIONARY.MEMBERS–关于SAS逻辑库成员的一般信息
DICTIONARY.TABLES–关于表的详细信息
DICTIONARY.VIEWS–关于所有数据视图的详细信息
DICTIONARY.CATALOGS–关于目录条目的信息
DICTIONARY.COLUMNS–关于所有表中的所有列的详细信息
DICTIONARY.INDEXES–表定义的索引
DICTIONARY.TABLE_CONSTRAINTS–所有表的完整性约束
DICTIONARY.CHECK_CONSTRAINTS–检查所有的约束
DICTIONARY.REFERENTIAL_CONSTRAINTS–所有表的参照约束
DICTIONARY.CONSTRAINT_COLUMN_USAGE–完整性约束引用的列
DICTIONARY.CONSTRAINT_TABLE_USAGE–使用完整性约束的表
DICTIONARY.MACROS宏变量名称和值
DICTIONARY.OPTIONSSAS系统选项的当前设置
DICTIONARY.TITLES当前分配给标题和脚注的文字
DICTIONARY.EXTFILES 当前分配的文件引用名



以下以批量重命名变量名为例。

/*第一步获取需要操作的变量数量,将该值存入宏变量中*/                                                                                proc sql ;                                                                                                                                    
select name                                                                                                                                    
   from dictionary.columns                                                                                                                     
   where libname='SASHELP' and                                                                                                                 
          upcase(memname)='CLASS';                                                                                                            
%let Rows=&SQLOBS;/*&SQLOBS为系统在运行SQL步后自定义的宏变量,After the first query, SQLOBS contains the number
of rows (tiers).               
*/                                                                                                                                             
/*%put &Rows; */  
/*第二步获取原有表中变量的名字,并存入宏变量数组*/                                                                                                                                 
proc sql noprint;                                                                                                                              
select name into :var1-:var&Rows                                                                                                               
   from dictionary.columns                                                                                                                     
   where libname='SASHELP' and                                                                                                                 
          upcase(memname)='CLASS';                                                                                                            
/* %put &var1 &var2;*/                                                                                                                        
quit;                                                                                                                                          
/*  第三部,修改表内变量的名成,建议另外创建一张表,而不是修改原有表内的变量名  */                                                            
data test;set sashelp.class;run;                                                                                                               
%macro rename;                                                                                                                                 
%Do i=1 %to &Rows;                                                                                                                             
     data test(rename=(&&var&i=%SYSFUNC(cat(&&var&i, &i))));                                                                                   
       set test;                                                                                                                              
       run;                                                                                                                                    
%end;                                                                                                                                         
%Mend rename;                                                                                                                                 

%rename



二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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