金数据处理技术 课程名称:CUR341金融数据处理技术Financial Data Processing Technology 课程性质:本学院选修,实验课程 学分课时:2学分,32课时,其中实验课时15 主讲教师:冯建芬副教授 所属院系: 金融学院金融工程系 电话:64495048,E-mail:jianfen feng@UlBE.EDU.CN 教学对象:金融学院大学二年级学生 考核方式:课下作业(10%),每章一次,提交程序和结果数据集 课堂实验(10%),每章1-2次,共计8次实验,提交程序和结果数据集, 期中考试(小组数据处理报告)(30%) 期末考试:开卷上机笔试(50%) 其中平时成绩包括课下作业和课堂实践,占20%,期中成绩占30%,期未考试占50% 学术诚信:本课程对于学生的学术诚信的要求遵从《对外经济贸易大学学生违纪处分条例》、《对 外经济贸易大学学生学习违纪处分实施细则》、《对外经济贸易大学考场纪律》的规定 教学方式:课堂讲授占比30%,上机实验占70%,教学中强调动手能力,采用实验教学、实践教学和研讨教学相结合的 方式。教学全程在金融实验室完成,结合SAS软件、Ocale实验教学平台、金融数据库和PPt进行教学。 出勤要求:遵从《对外经济贸易大学本科生课堂学习规范》,要求学生关闭一切电子设备;不能 无故缺席上课;上课专心听讲,积极参与课堂讨论;课后认真复习课堂上讲授内容,独立完成教师布置的任 务;并预习新课。学生缺勤不得多于总课时的四分之一。教师可以根据考勤情况决定学生是否可以参加考 试、是否扣分。 一、课程简介: 本课程通过大量案例,借助数据处理和分析软件SAS,学习处理金融数据的方法和技术,是一门金融和计算机紧密结合的实 践性非常强的综合课程。内容涉及:金融数据处理与分析软件(SAS)的基本应用、金融数据的批处理技术、常见统计分析方法的应 用及金融数据处理案例分析等。主要教学内容有:数据文件在不同数据库间的格式转换、数据筛选与清洗技术、循环处理技术、同时 处理多个文件的数据批处理技术(宏编程技术)等。 二、教学目标 本课程的教学目的是弥补学生在数据处理环节的不足,提高其金融数据处理与分析能力,为金融计算、金融时间序 列、 金融风险定量分析等后续课程学习及金融实践提供技术支持,为提高本科生的科研能力和实践能力排除障碍。 三、课程学习资料 1教材 《SAS编程技术教程》(第2版),朱世试,清华大学出版社,2013。 2.参考资料 《SAS编程技术教程》(第1版),朱世武,清华大学出版社,2007。 The little SAS book,Delwiche,Lora D.and Slaughter,Susan J.,2003,NC:SAS Institute Inc. 《BASE SAS软件使用手册》,高惠璇等,编译,中国统计出版社,1997年 《SAS编程与数据挖掘商业案例》,姚志勇,机械工业出版社,2010. Using SAS in Financial Research),Boehmer,Ekkehar,John Paul Broussard and Juha-Pekka Kullunki,2002,NC:SAS Institute Inc. 《金融计量学》,张宗新,中国金融出版社,2012. 《SAS统计分析与数据挖掘》,谢龙汉,尚涛,电子工业出版社,2013. 四、学习效果及达成途径 1.学习效果: 通过本课程的学习,希望达成的学习效果如下: 1)掌握SAS的BASE SAS模块的语法,理解SAS处理数据的原理,能够熟练的编制SAS完整的程序。 2).能够使用SAS对金融数据进行各种文件格式间的转换,并通过SAS熟练地访问和生成各种数据库文件、PC文件。 3).能够通过SAS查询金融数据库数据,远程访问金融数据终端。 4).掌握基于SAS软件的金融数据的各种清洗技术,包括研究数据的筛选、数据查询、缺失值处理、日期格式数据处理、多个数据 表的纵向合并、横向合并、多表查询、单表查询、数据表记录的添加、删除、更新。 5).掌握SAS帮助系统的查询和学习方法,能够自主利用SAS帮助系统学习其强大的统计分析功能、金融计量功进行金融数据挖 掘 6).掌握基于SAS的海量数据的批处理技术 7)掌握SQL数据库查询语言在SAS中的应用,能够灵活运用SQL语言进行多表数据的查询和链接。 2.达成学习效果的途径 善于动手,课前完成例题程序的上机任务;上课跟着老师思路走,积极参与课堂讨论;充分利用实验教学平台的讨论 区和教师指定的答疑时间及时答疑解惑;按时完成课堂实践任务和课下作业,协同完成小组金融实践任务,认真准备期 未考试
五、教学进度计划表 本课程教学周为16周,具体安排如下 周 教学 参考资料 作业与 次 内容提要 方式 考试 第一讲:认识 讲 教材第1章 课堂上 SAS 授、 机 实验 第二讲:SAS 教材第2,3 的数据存储与读 章,第4 章4.1- 2.1SAS对 讲 4.4, 2 数据文件的管 授、 4.14,第8 理 实验 章,第9章 2.2建立数据 集,读入原始 数据 学生实践:建 课堂实 立逻辑库,建 实验 践测验 立数据集,读 入数据 2.3输出原 讲 4 始数据 授、 实验 学生实践:外 课堂实 5 部文件与SAS 的数据传输:导 实验 践测 验;课 入与导出 下作业 第三讲查询语 教材13, 课下作 言SQL 14章 业 3.1SQL过 程与 SQL语言 简介 讲 6 3.2从单 个表中查询和 实验 加工数据 3.3从多 个表中查询和 拼接数据 学生实 课 7 践:利用SQL 实验 堂实践 语言查询和加工 测验 数据
周 教学 参考资料 作业与 次 内容提要 方式 考试 第四讲:数据 第4章4.5, 集的编辑与修 4.6.4.7 改 4.8.4.11 4.1改变 4.12,第5 8 变量或数据集 授 章,第6章 的属性 实验 4.2变量 和观测的选 学生实践:对 课堂实 数据的初步处 践测验 9 理,变量和观 实验 课下作 测的选择 4.3变量编辑与 观测的修改 4.3.1数据集拼 接增加变量和 讲 10 观测 授 4.3.2利用表达 实验 式与函数修改 观测 4.3.3利用循环 课 语句修改观测 讲 下作业 11 和变量 授、 4.3.4利用数组 实验 修改观测 学生实践:数 课堂实 据的进一步处 践测 理技术,变量 验; 12 与观测的修改 实验 布置小 技术应用 组金融 实践任 第五讲:宏编 教材第16 课下作 程技术 业 5.1宏 变量的 定义与 引用 讲 13 5.2宏 的定义 授、 与调用 实验 5.3宏程 序语句和宏函 数 5.4数 据步接口程序 学生实践:宏 课堂实 技术的 14 应用一 宏与数据 验 验 批处理技 术 第六讲过程步 讲 教材第 下作 15 的应用 11,12章 业 实验 16 学生小组演示 研讨 小组作 报告 业研讨
周 教学 参考资料 作业与 次 内容提要 方式 考试 17- 期末考试(学校统一安排考试时间及地点) 18 六、教学内容: 第-章:SAS入门 【教学目的和要求】 使学生了解SAS的基本操作界面和操作窗口,指导学生如何使用SAS强大的帮助系统,并通过部分案例使学生了解 SAS的数据处理功能。 【主要内容】 1.1SAS软件介绍 1.2SAS工作界面 1.3SAS窗口操作 1.4SAS帮助文档 1.5SAS安装 2,其中实验课时1课时 《SAS编程技术教程》第二版,第一章 作业与练习(课上实验,1课时): 1关闭日志窗口、输出窗口、编辑器窗口,重新打开上述三个窗口;(使用快捷键) 2关闭资源管理器,停放资源管理器; 3关闭结果窗口,停放结果窗口: 4.通过菜单建立逻辑库,删除逻辑库; 5打开程序”例1-1 class程序”,运行程序,另存程序; 6建立新的程序,输入如下代码: options noxwait; x md F:\data; libname data "F:\data"; libname data clear; 7逐行执行程序;保存新的程序; 8清楚日志窗口的内容; 第二章:SAS的数据存储与读取 【教学目的和要求】 使学生掌握如何建立SAS的数据集,以各种方式读入数据进行存储,包括直接输入方式、数据集导入方式、外部文 件(excel文件、txt文件、access文件,ODBC数据源、SPSS文件等)导入方式,并掌握如何将SAS数据集中的数据以 各种方式展现或导出到外部文件。 【主要内容】 2.1SAS对数据文件的管理; 2.1.1SAS逻辑库与SAS数据集功能及其属性 2.1.2建立逻辑库,读入文件: 2.2建立数据集,读入原始数据; 2.2.1建立空数据集 2.2.2直接对变量赋值建立数据集 2.2.3直接输入数据建立数据集 2.2.4从其他数据集导入数据建立数据集 2.2.5从外部文件导入数据建立数据集 2.3输出原始数据 2.3.1输出到Log窗口 2.3.2输出到输出窗口: 2.3.3导出的外部文件: 教学总时数:8,其中实验课时4课时 参考资料:1.《SAS编程技术教程》第二版,第二章,第三章,第四章:4.1-4.4,4.14,第8章,第9章 2.SAS系统帮助目录:SAS产品àBase SASaSAS语言字典语言元素字典 作业与练习: 课堂实验1(2课时): 1,通过菜单操作和llibname语句分别建立几个逻辑库,分别指向如下文件夹:
2建立各种空数据集 3.完成利用x发布主机操作命令的任务 4.完成注释语句的实验任务 5.通过赋值建立数据集的实验任务 6.完成通过数据行读入数据建立数据集的任务 课堂实验2(2课时) 1.利用importi过程导入数据的实验任务. 2.利用input--infile语句导入文本数据的任务。 3.利用put语句输出数据到log窗口 4.利用printi过程将结果输出到输出窗口 5.利用exporti过程将数据导出到外部文件 6.利用file-put语句将数据导出到文本文件 课下作业: 1)利用x命令,获取data文件夹中文件名前三个字符是stk的文件,将其存储到文件name.txt; 2)查找帮助,尝试在SAS的命令栏使用下列SAS命令,并说明其作用:keys,dlglib,libname,dir,var,submit, recall. 3)将name.txt中的内容读入到SAS数据集hwork.a,变量名为name,长度为9($9.),要求不能在同一行读入两条记录 (@)。(infile-inputi语句) 4)将hwork.a中的变量name输出到外部文件nongstk.txt,每一个变量记录添加字符串,如:stk000001变为: %stk(stk000001,result); 5)登陆锐思数据网站(账号:uibe/密码:uibe):www.resset.cn参考输出设置部分的"格式说明”文档,分别下载 如下格式的数据源,下载条数为500条,且将其转换为S八S数据集。要求设置好环境,并给运行结果正确的程序。 逗号分隔文本(*.CSV) 空格分隔文本(*TXT) Tab键分隔文本(*.TXT) EXCEL电子表格(*XLS) 字符型EXCEL电子表格(*.XLS) 6)用PUT和FILE语句写SAS程序,将数据集data.class直接输出为外部TXT文本。 7)在数据集中建立100个变量。 第三章:查询语言SQL 【教学目的和要求】 SQL是数据库通用的一种强大的查询语言,用它可以简化挑选和处理数据的过程。通过本章的学习学生可以学习从 单个数据文件或多个数据文件中进行合并查询数据的技术,以及在查询中进行简单计算和汇总的方法。本章要求学生掌 握SQL过程的简单应用;会使用SQL查询语句处理单个数据集和多个数据集的查询;会使用SQL查询语句进行简单的求和、求均值等 汇总运算。 【主要内容】 3.1SQL过程与SQL语言简介 3.1.1SQL语言简介 3.1.2SQL过程简介 3.1.3SQL中的语句及其作用 3.2从单个表中查询和加工数据: 3.2.1利用select语句处理和加工数据; 3.2.2创建新表存储查询结果; 3.3从多个表中查询和拼接数据; 3.3.1从多个数据表查询数据实例 教学总时数:4,其中实验课时2课时 参考资料:1.《SAS编程技术教程》第二版,第十三、十四章 2.SAS帮助目录:SAS产品àBase SASàSAS SQL过程用户指南 SAS产品aBase SASaSAS:过程a过程aSQL过程 作业与练习: 课堂实验(2课时)利用SQL过程完成单个表和多个表的金融数据查询和汇总任务; 1.a)从data.exchbdqttn.1中选择债券代码、日期、债券名称、收盘全价、收盘净价、净价成交金额、成交笔数,并 生成year、qtr、month:三个变量,存储日期的年、季、月,年限范围为2000年至2010年; b)将上述结果存储到数据集ex.ex3_1中; c)对数据集ex.ex31按照年、季、月排序, d).删除ex.ex31中成交笔数为0和收盘净价缺失的数据,将剩余结果保存到数据集ex.ex32中 2.将数据集ex.ex32中的数据导出到excel表格ex32.XLS 3.查询data.exchbdqttn1中所有不同的股票代码; 4.利用数据集data.dret计算各股票日平均收益,并按平均收益进行排序
5.对ex.ex3_1按季度分组计算可转债总交易量和总成交金额,存储在数据集ex.sum_qtr中,该数据集应该还有年,季 两个时间指标; 6.从data.bdinfo中挑选市场标示(mktflg)同时含有"1","3”或者同时含有"2”,“3”的观测,并将筛选出的观 测按照债券标识(bdid)升序排列,结果存至ex.bdinfo; 7.从data.exchbdqttn中挑选出锐思标识(resbdid)在ex.bdinfo中的债券行情数据 课堂实践2.数据的进一步处理技术,变量与观测的修改技术应用 课下作业: 1).以2008年A股上市公司股票为样本,找出在2008年摘帽的公司(即公司名称中ST被去掉的) 2).查找2009年首次被ST的上市公司 3).查找截止到2009年9月30日,一直没有被特别处理的股票。 4).计算data.dret中各股票的月累计收益率,增加变量positive,若月累计收益率大于0,值为1,否则值为0, 5).试由以下的9种德国马克对美元汇率看跌期权和9种英镑对美元汇率的看跌期权产生81种组合。 一年期,DM/USD汇率的9种不同看跌期权的执行价格和成本 执行价格Kdm成本cdm 0.660.085855 0.650.032191 0.640.020795 0.630.017001 0.620.013711 0.610.010851 0.600.008388 0.590.006291 0.550.001401 一年期,BP/USD汇率的9种不同看跌期权的执行价格和成本 执行价格Kbp成本Cbp 1.300.137213 1.250.082645 1.200.045060 1.150.028348 1.100.016146 1.050.007860 1.000.003277 0.950.001134 0.900.000245 6).很多情况下,读者可能会综合数据库中多张表的内容,来更直观更方便地获得全面信息。比如,需要把同一公司的主 要财务比率和财务指标放在一起来研究整个公司。 数据合并举例: sold数据集:利润及利润分配表旧准则。 Frs数据集:代表公司的主要财务比率表 Scf old数据集:现金流量表I旧准则。 需要把这三个表中的以下变量综合起来: Is old表:主营业务利润(Mopeprf),营业利润(Opeprf),营业外收支净额=营业外收入Noperev-营业外支出 Nopeexp,利润总额(Totprf,)净利润 FrS表:每股收益摊薄(EPS),流动比率(Currt),速动比率(Qckrt),资产负债率(Dbassrt),每股净资产 (NetassPS),销售净利率(Netprfrt),每股经活动产生的现金流量净额(OpeCFPS),总资产周转率(次)(Totassrat), 净利润(扣除非经常性损益后Netprfcut) Scf_old表:经营活动产生的现金流量净额(NCFope),现金及现金等价物净增加额(NetincrCCE). 第四章:数据集的编辑与修改 【教学目的和要求】 学习几乎全部的数据处理技术,包括多个数据表的拼接和匹配合并技术,使用表达式和函数进行数据编辑的技术 使用循环语句通过单个数据生成多条数据的技术,使用数组简化处理多个变量的技术等等,这些技术的综合运用基本能 够解决金融数据的初步处理问题。要求学生熟练运用本章的dta步程序语句,并灵活运用上述技术解决金融问题。 【主要内容】 4.1改变变量或数据集的属性 4.1.1通过数据集选项改变属性:data语句,set语句 4.1.2通过语句改变属性:labeli语句、rename语句、retain语句; 4.2变量与观测的选择
4.2.1选择变量:keep,drop选项与语句; 4.2.2选择观测 4.3变量编辑与观测的修改 4.3.1数据集拼接增加变量和观测 4.3.2利用表达式与函数修改观测 4.3.3利用循环语句修改观测和变量 4.3.4利用数组修改观测 教学总时数:10,其中实验课时4课时 参考资料:《SAS编程技术教程》第二版第四章4.5,4.6,4.7,4.8,4.12,第五章,第六章 作业与练习: 课堂实验1(2课时),对数据的初步处理,变量和观测的选择 1.建立数据集ex.ex41,从数据集data.fdbs读入数据: a)给fdcd加标签为“基金代码“,给fdnm加标签为“基金名称“,取消date的标签; b)利用data语句的rename选项,将fdcd更名为code,将fdnm更名为name: c)为数据集ex.ex41加标签为”基金资产负债表” 2.建立数据集ex.ex42,从数据集data.class中读入数据,给每个变量加一个中文标签,并删除变量sex; 3.下段程序的END,LASTOBS和X中,哪个是选项?哪个是自动变量?哪个是普通变量? data a; set resdat.a600001 end=lastobs; if lastobs: x=lastobs put 'last observation'; run; 4.下段程序能否正常运行?等式END=END两边的含义是什么? data a; set resdat.a600001 end=end; if end; proc print; title2 'last observation'; run; 5.建立数据集ex.ex421,读去数据集data.monret1的前100条记录,但从第5条开始读入。 6.建立数据集app1d,获取数据集data.hf000012的第1000条记录。(尝试寻找效率最高的方式) 7.剔别除data.exchbdqttn1中成交笔数缺失和为0的记录。 8.输出数据集data.hf000012的总的记录数到log窗口。 9.根据data.hf000012中记录的不同月份将相同月份的数据输出到一个数据集。 课堂实验2(2课时). 1.纵向合并data.stk000001,data.stk000002,data.stk00004,data.stk000005的数据到数据集ex.stock,并将该数据集 输出到stock.xs. 2.利用data.stk000001的收盘价clpr计算五日百分比收益率将其存到数据集ex.rday5000001; 3.将data.stk000001和data.stk000002中的数据按照年份的先后顺序进行纵向合并,结果存为ex.ex43_3。 4.利用inputi函数将data.Istkinfo中的字符型变量stkcd的值转变为数值型变量code,结果存为ex.ex43_4。 5.利用字符匹配函数选取data.Istkinfo的股票名称中含有“中”的记录,存储在ex.ex435。 6.求100以内的偶数之积存储在ex.ex436; 7.创建包含日期变量DATE的SAS数据集,日期值从1900年1月1日到2000年1月1日,存储在ex.ex43_7。 8利用锐思数据的首次发行与上市数据,选取2006年在沪市上市的公司,保留股票代码、上市日期、发行价和首日收盘 价;从月累积收益率数据中提取这些公司在上市后3年的月度数据,与其首次发行数据进行合并,然后将其月度的收益率 与上证指数相应月度收益率合并,计算其月度超额收益率与3年来的月均超额收益率。结果存储在ex.x438(首次发 行与上市数据在iissultst中,月累积收益率数据在moncrete中,上证指数月度收益率在idxmonret中) 9.数据集A有一个变量n,5个观测值1,2,3,4,5。数据A1由下面程序2产生,同样有一个变量n,5个观测值1,2,3,4,5。试 分析下面两段程序中,PUT语句在LOg窗口输出结果的差异,为什么? 程序1: Data a; Set a; Put n=; Run; 程序2: data al; do n=1 to 5; output; end; put n=;
run; 10.建立数据集ex.431,其含有100个变量x1-x100,100个观测,分别用DATA步,DATA步数组语句实现。结果存储在 ex.ex4 3 10 11.产生100个独立同分布的随机变量e1-e100,每个随机变量服从标准正态分布,对每个随机变量抽取1000个随机 数;结果存储在ex.ex4311 12.对于上面生成的100个随机变量,产生另外100个随机变量sum1-sum100,对i=1,,100,其对应的值分别 为:Sumi=a,结果存储在ex.ex4312 课下作业: 第一次作业: 1.给下段程序的主要语句加注释。STOP语句能否删除?为什么? data a; do obsnum=1 to last by 20; set ResDat.stk000001 point=obsnum nobs=last; output; end; stop; run; 2,现有一个数据流:a2b3cd46,按下面要求创建SAS数据集。用语句input id$no;变量id取值上面数据流里的 a,b,c,d,变量no取值2,3,4,6。但是这个数据流存在问题:如有的id没有no,有的no没有id。创建SAS数据集,删除只有 id没有no或者只有no没有id的观测,即把上面的c和6去掉,最后得到三个观测,a2,b3与d4.。 3.现有一个数据流:a23223bc4363c511d400620,按下面要求创建SAS数据集。 用语句input id$no;变量id取值上面数据流里的a23,bc4,11d,变量no取值233,36,400。但是这个数据流存在问 题:如有的id没有no,有的no没有id。创建SAS数据集,删除只有id没有no或者只有no没有id的观测,即把上面的3cS 和620去掉,最后得到三个观测: a23223 bc436 11d400 4.建立数据集block,在数据集data.hf000012中挑选(成交额-成交量*成交价),其绝对值小于10000的数据。即删除那 些因为数据传输错误导致的成交额与成交量不匹配的数据。 5.将data.monret中的2000年以后的记录按照年份分成不同的数据集,同一年份的放在一个数据集,如2000年的记录放 在数据集data2000中,2001年的记录放在数据集data2001中,依次类推。 第二次作业: 1.为比较不同股票间的相对价格变化,从data.idx.399106中提取data.stk000001,data.stk000002,data.stk00004共有的交 易日数据,存储在ex.pricer中,将data.idx.399106,data.stk000001data.stk000002,data.stk00004的收盘价cpr分别改名为 clpr0-clpr3,在ex.price中保存date,clpr0-clpr3。 2.将样本数据文件中文件名为“stk”+股票代码的SAS数据集纵向合并成一个数据集。如stk000001.SAS7bdt stk000002.SAS7bdat等 3.将第三章的第6个作业用data步语句实现。 4. 数据集Calendar只有日期变量,test包含股票代码、日期与收盘价三个变量。合并两个数据集,用Calendar中的日期数据替代 test数据集中每只股票的日期数据。 5.设master_trans是公司所有客户的历史交易总额,为主数据集,day_trans是公司每天所有客户(包括新客户和老客户)的交易 流水表。要求:将每天产生的数据表day_trans加载到历史表中,汇总每一个客户在截至最新日期时的累积交易总额。 6.建立数据集ex.hm341,从data.stk000001中读入数据,如果oppr开盘价)高于clpr(收盘价)color='red',否则 color='green',并根据prevclpr(前收盘价)和clpr计算今天的涨跌幅度luctuate。最终保留变量date,prevclpr,,oppr,clpr,color, fluctuate。 7.从data.hf000012中挑选交易量(tvolume)大于10万的记录,存储在ex.blocktrade中,并统计每天大额交易的笔数,如果一天 内大额交易笔数超过5笔,删除当天所有的大额交易记录。 8.数据集stk000001日期变量DATE包含有缺失值,创建包含日期变量DATE的数据集B,并填充开始到结束日之间的所有日期值。 9.将同一个公司的A,B股合并。 在处理公司信息表的时候,通常我们会遇到数据源将同一公司的A,B股分开处理,并写成两条观测的情形。如公司 代码为C000002的股票,在这里是以两条记录的形式记录下了该公司发行了A股和B股的情况,在公司信息表中,需要将 其整合成一条信息,并分别以A,B股的名称和形式来表示。而且有的公司先发行A股,有的公司却是先发行B股,这也 是需要注意的问题
原始样式: 公司代码 票代 码 日期 中文名称 票名 股票类型 C000001 2005- 深 000001 深 Y 05-18 发展银 展A 股 有限公司 C0000022000- 000002 r 08-15 科 万科 业 份 有限公司 C0000022005- 万 200002 万科B B 06-21 企 股份有限公司 C000003 2000- 20000 08-29 田 金田B 6 实业集团股份有限公司 C0000032004- 金 000003 04-30 实业集团股 金田A
份有限公司 C0000042005- 000004 A 07-09 农科技 中国农大科技股 有限公司 C0000052005- 000005 P 05-27 圳世纪星源股份 星源 有限公司 C0000062005- 000006 Y 05-19 深圳市 深振业A 振业集团股 有限公司 C0000072005- 000007 A 07-30 圳市赛 达声A 达声股份有限公司 C0000082005- 000008 05-2 东宝利 宝利来 A