通过SAS宏实现自动导入批量数据


批量导入数据,是做分析的第一步,现在把之前www.rokia.org的论坛上写的一个帖子转过来,这个帖子居然也有16万次的阅读量,自我安慰一把。

最近看了本书,《sas data preparation for data mining》觉得相当不错,其中很多代码都是相当经典的,而且难度也不大,决定在这学期把阅读笔记和代码说明写出来,与大家分享。

正想使用代码片插入功能,发现有R的语法格式,却没有SAS的语法格式,输入扩展名后,给分配了一个text的文件类型,呵呵,鄙视下SAS。

 

【程序任务】附件中有392只从WIND数据库下载下来的股票,每只股票有7个字段,需要将这些数据都导入到SAS程序进行进一步分析。

【基础要求】掌握SAS BASE 数据导入、宏

【实现过程】

(1)首先需要获得所有附件的文件名,以便导入。另,文件名命名很有规则,可以提取出股票代码和上市地点。如:000014.SZ.CSV

(2)将文件名、股票代码、上市地点三个参数传递到宏参数里面,生成392个包含参数值得宏调用语句。

(3)写一段导入CSV的宏程序主体。

(4)执行包含392只股票参数的宏调用语句导入392只股票数据。


程序示例数据:点击下载

详细程序如下:

/*Program by Xiamen University [email protected], Any comments are welcome*/

/*(1)首先需要获得所有附件的文件名,以便导入,并从文件名中提取出股票代码和上市地点*/

/*将392只股票数据文件拷贝在c:\temp里面*/
filename folder pipe 'dir C:\temp /b'; /*指定待获取文件名的文件夹*/
data file_list; 
length fname $13.; /*设定文件名的长度及变量名*/
infile folder truncover;  /* 获取文件名 */
input fname $13.; /* 将文件名写入fname变量中*/
stockcode=substr(fname,1,6); 
/*获取股票代码*/
location=substr(fname,8,2); 
/*获取股票交易所代码*/
run;


/*(2)将文件名、股票代码、上市地点三个参数传递到宏参数里面,生成392个包含参数值得宏调用语句。*/
/*创建宏列别*/
data importcsv;
set file_list;
filename= trim(fname);
a='%importcsv(';
b=',';
c=')';
file "d:\temp\port.txt";
put a $ location $ b $ stockcode $ b $ filename $c;
run;
/*导入数据*/


/*(3)写一段导入CSV的宏程序主体。*/
%macro importcsv(location,stockcode,filename);
data &location.&stockcode;
/*Rember to use double */
infile "c:\temp\&filename" delimiter =',' MISSOVER DSD firstobs=2;
input stockcode $ symbol $ date lagclose range turnover;
format date yymmdd10.;
informat date yymmdd10.;
run;
%mend;

/*(4)执行包含392只股票参数的宏调用语句导入392只股票数据。*/
%include "D:\temp\port.txt";


/*(5)补充内容:导入EXCEL的多个sheet的方法
如果你有一个EXCEL里面有三个sheet, 分别为sheet1 sheet2 sheet3,可以采用以下方法导入所有sheet。如果有大量的sheet,则可以先编一个宏生成这些sheetname。
*/
%macro importxls(sheetname); /*&sheetname为sheetname的宏变量*/

PROC IMPORT OUT= WORK.&sheetname
            DATAFILE= "C:\test.xls" 
            DBMS=EXCEL REPLACE;
    RANGE="&sheetname$";  
    GETNAMES=YES;
    
RUN;
%mend;
%importxls(sheet1);
%importxls(sheet2);
%importxls(sheet3);



你可能感兴趣的:(SAS)