加载中…
个人资料
数据海洋
数据海洋
  • 博客等级:
  • 博客积分:0
  • 博客访问:1,131
  • 关注人气:159
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

SAS批量导入EXCEL中数据

(2012-04-18 15:38:55)
标签:

sas

excel

元数据

间接引用

宏程

数据字典

过程

杂谈

分类: SAS
   把EXCEL数据导入到SAS相信是各位朋友经常碰到的问题,把数据导入到SAS中的方法有很多:infile import 或者通过菜单操作均可实现,但如果导入的EXCEL中包括大量的SHEET ,是一个很麻烦的工作。
把以前写过的一段脚本分享到博客中,也方便下次自己查找。
整体逻辑过程:
1、首先,确定如何如何读入EXCEL中SHEET。
2、根据EXCEL中的SHEET的数量使用一个循环来读入数据。 
主要用到的几个过程为:
一、libname 库名 EXCEL 地址

这是一个很实用库建立过程,这个改天写篇短博来讨论。

1、通过libname 库来引入某个EXCEL中的所有 SHEET 数据。

2、按每sheet会对应在库下生成一个数据集

二、数据字典

   在SAS中有Dictionary Tables 存储了系统相关设置各个库现表字段的相关信息  相当于一个元数据的元数据。

1、在SAS会话开始的时候创建。

2、vstabvw存储了每个库的内容:表名、类型。

三、宏

  1、通过宏来实现这个过程,EXCEL的名字作为参数似入到宏程序中。

  2、注意间接引用宏的时候要注意。

 

 
下面提如何通过宏脚本来实现批量导入EXCEL数据到SAS中。
%let dir=C:\demo;
%macro ReadXls (name);
libname excellib excel "&dir.\&name";
proc sql noprint; 
create table sheetname as
select tranwrd(memname, "''", "'" ) as sheetname
from sashelp.vstabvw
where libname= "EXCELLIB";
select count(DISTINCT sheetname) into :number
from sheetname;
select DISTINCT sheetname into :sheet1 - :sheet% left(&number)
from sheetname;
quit;
libname excellib clear; 
%do i=1 %to &cnt_sht;
proc import datafile= "&dir.\&name" 
out=sheet&i replace;
sheet= "&&sheet&i";
getnames=yes;
mixed=yes;
run;
proc append base=master data=sheet&i force; 
run;
%end ;
%mend ReadXls;
%ReadXls (test.xls)
(这段脚本当时参考了SUGI上的一篇文章。回头找找!)

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有