资源描述:
《SAS批量读入Excel+批量修改变量名.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、收集了N多Excel表格,如何将他们汇总在一块儿呢?如果会VBA,这或许也不是一件难事,事实上有些Excel插件就可以解决这个问题。这里看看如何用SAS来解决/*指定需要合并的文件的路径*/%letpath=D:test;/*注意dir后面与路径之间要有空格*/filenamefilespipe"dir&path/b";/*读入文件名列表*/datatest;infilefilestruncover;inputname$96.;run;/*获取文件名宏变量和文件个数宏变量*/procsqlnopri
2、nt;selectscan(name,1,';'),count(name)into:filenamesseparatedby';',:nfromtest;quit;/*循环读入Excel文件*/%macroinfiles;%locali;%doi=1%to&n;procimportdatafile="&path.%scan(&filenames,&i,';')"out=_a&idbms=excelreplace;run;%end;%mend;%infiles/*合并文件*//*这一步也可以放在上面的
3、循环中处理*/%macroappends;%locali;%doi=2%to&n;procappendbase=_a1data=_a&i;run;%end;datafiles;set_a1;run;%mend;%appends;/*删除文件*/procdatasetslib=worknolist;delete_a:/memtype=data;quit;如果是遇到这样的表头呢?好吧,当然也是可以正确读入的。libnamelocal"d:test";%letin_file_path=d:test;%m
4、acroin_file(in_file_name,read_sheet_name,fstobs,out_file_name);procimportout=&out_file_namefile="&in_file_path&in_file_name"dbms=excelreplace;dbdsopts='firstobs=&fstobs';getnames=no;scantext=yes;usedate=yes;sheet=&read_sheet_name;scantime=yes;dbsaslabe
5、l=none;run;%mend;%in_file(-XXXX花名册-(3)副本.xlsx,在职名册,4,hr);/*如果不加dbsaslabel选项,打开数据集时会发现字段名称为A,B,C...打开缓慢,会导致SAS崩溃*//*建议使用office2013及以上*/读入后发现字段名是这样的,没有任何意义,怎么批量改?/*批量修改变量名*//*应用场景:*//*读入带有中文列名的Excel表格时,会产生例如_col1,var1,F1等形式的字段名,这往往不是所需要的*//*一个一个rename比较麻烦
6、,可以采取批量修改的方式,特别是读入表格较多的时候*//*注意:新的字段名需要与原字段名位置相对应,逻辑库和数据集名称需要大写*//*%rename(WORK,A,'aabbccddeeffgghh');*//*例如要将abcdefgh修改为aabbccddeeffgghh*/dataa;inputabcdefgh;stop;cards;;run;%macrorename(lib,dsn,newname);data&LIB..&dsn._copy;set&LIB..&dsn.;run;procsqln
7、oprint;selectnvarinto:num_varsfromdictionary.tableswherelibname="&LIB"andmemname="&DSN";selectdistinct(name)into:var1-:var%trim(%left(&num_vars))fromdictionary.columnswherelibname="&LIB"andmemname="&DSN";quit;procdatasetslibrary=&LIB;modify&DSN;rename%d
8、oi=1%to&num_vars.;&&var&i=%scan(&newname,&i,'')%end;;quit;%mendrename;%rename(WORK,A,'aabbccddeeffgghh');