当前位置:首页 > Exercise - 04DATA步数据集操作
Exercise_DATA步数据集操作
难度级别1:Exercise 1-10 难度级别2:Exercise 1-15
要求:
1. 利用本章及之前的课程内容完成练习。欢迎使用后续课程内容提供其它多种解法。 2. 只提交txt格式的解答及规范程序集,不提交结果文档。
1. 计算数据集A中变量X的累乘。
2. 创建空数据集B,包括字符型量Stkcd, 日期型变量Rdate, 字符型量Lstknm和3个数值型变量Var1-Var3。 由数据集B创建数据集C, 并将数据集C中变量的顺序按Stkcd, Lstknm, Rdate, Var3, Var2,Var1排列。
3. 数据集A和B包含同样两变量DATE和PRICE,以DATE为标识变量合并数据集A和B为C。合并时应该注意什么?
4. 假设SAS数据集A中的变量logdate为如下形式的字符格式: 2011-12-2 2012-8-6 2012-8-10
将其转换为日期格式变量。
5. 运行SAS程序过程中,SAS系统创建的自动变量是否包含在创建的数据集?一般情况下,怎样查看系统自动变量的值?
6. 创建组标识变量GROUP,将数据集A中的观测等分为10组,观测值不能整除10时,前余数组各多加一个观测值。
(如:103个数,余数为3,则前三个组都是11个) 7. 现有一个数据流:a 2 b 3 c d 4 6,按下面要求创建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去掉,最后得到三个观测,a 2, b 3与d 4。
8. 现有一个数据流:a23 223 bc4 36 3c5 11d 400 620,按下面要求创建SAS数据集。 用语句input id $ no; 变量id取值上面数据流里的a23, bc4, 11d ,变量no取值233,36,400。但是这个数据流存在问题:如有的id没有no,有的no没有id。创建SAS数据集,删除只有id没有no或者只有no没有id的观测,即把上面的3c5和620去掉,最后得到三个观测: a23 223 bc4 36 11d 400
9. 当股票的分配事件分两次完成,且第一次分配在节假日或该股票的停牌日,第二次分配在下一个交易日时,一般的数据库会有如下表所示的观测值存贮方式。写程序将停牌日(即
没有收盘价的那个观测值)中的分配事件合到下一个观测中。 股票 代码 … 日期 … 收盘价 … . … … … … … 送股 比例 . 0.2 0 . . . . 转增 比例 . 0.1 0 . . . . 配股 配股价 比例 . 0 0.5 . . . . . 0 5.20 . . . . 增发 比例 . 0 0 . . . . 增发价格 . 0 . . . . 现金 红利 . 0 . . . . xxxxxx xxxxxx xxxxxx xxxxxx xxxxxx xxxxxx xxxxxx xxxxxx … … … … 0 0.50
注:…表示有数据值,.表示缺失值。
编程变量名参考: 股票代码Stkcd 日期Date 收盘价Clpr
送股比例Stkdrate 转增比例Capissurate 配股比例Rigoffrate 配股价Rigoffpr 增发比例Snirate 增发价格Snipr 现金红利Dividend
创建样本数据集: data a;
input Stkcd Date yymmdd8. Clpr Stkdrate Capissurate Rigoffrate Rigoffpr Snirate Snipr Dividend;
format Date mmddyy8.; cards;
600001 01-01-01 8 . . . . . . .
600001 01-01-02 . 0.3 0.3 0 0 0 0 0 600001 01-01-03 9 0 0 0.5 0.2 0 0 0.1 600002 01-01-02 10 0 0 0 0 0 0 0
600002 01-01-03 . 0.2 0.3 0.5 0 0 0.1 0.2 600002 01-01-04 12 0 0 0 0.2 0.3 0.5 0.6 ; run;
10. 假设股票市场的股数数据如下表,对每支股票,按如下要求设计填充总股数和流通股股数数据的SAS程序:以该股票前面的股数数据填充后面的缺失值,如果某支股票上市交易时就缺失股数数据,则用该股票上市后的第一个股数数据向前填充。
股票代码 … 000001 000001 … 000001 000001 … 000002 000002 日期 收盘价 股数变动日 … … … 20000-10-10 … … … … … 2001-09-08 … . 2003-11-11 . … . 总股数 . 缺失 1000000 . 1200000 . . 3200000 . 流通股 缺失 500000 600000 1500000 xxxxxx xxxxxx … xxxxxx xxxxxx … … … 注:…表示有数据值,.表示缺失值。
编程变量名参考: 股票代码Stkcd 日期Date 收盘价Clpr
股数变动日CapchgDate 总股数Fullshr 流通股trdshr
/* 创建样本数据集 */ data test;
infile datalines missover ;
informat Stkcd $6. Date yymmdd10. Clpr 8.2 capchgDate yymmdd10. fullshr Trdshr 20. ; input Stkcd $ Date Clpr capchgDate fullshr Trdshr;
format Stkcd $6. Date yymmdd10. Clpr 8.2 capchgDate yymmdd10. fullshr Trdshr 20.; cards;
600000 2003-1-20 9.94 2003-1-20 3915000000 900000000 600000 2003-1-21 9.68 600000 2003-1-22 9.66 600000 2003-1-23 9.6 600000 2003-1-24 9.88 600000 2003-1-27 10.07 600000 2003-1-28 10.17 600000 2003-1-29 10.31 600000 2003-2-10 10.09 600000 2003-2-11 10.2 600000 2003-2-12 10.31 600000 2003-2-13 10.13 600001 2000-5-29 8.13 2000-5-29 600001 2000-5-30 8.14 600001 2000-5-31 8.65 600001 2000-6-1 8.93 600001 2000-6-2 9.11
600001 2000-6-5 9.02 2000-6-5 1486553100 490000000 600001 2000-6-6 8.63
600001 2000-6-7 8.52 600001 2000-6-8 8.55 600001 2000-6-9 8.3 600001 2000-6-12 8.34 ; Run ;
11. 当股票发生分配事件时,可以根据相应的分配和股数数据计算股价的调整因子。为了检验数据的正确性,有必要根据股价调整因子来计算当天股价的变动是否合理。如下表所示,可以算得除权日股票涨跌的绝对值为:|10.00-5.20*2.00| = 0.40,相对于当时的股价5.20来说,这个变动值是在合理的范围内的。设计程序,对于不同的股票,计算分配日股票涨跌(=分配前股票价格–分配日股票价格*股价调整因子)的绝对值。只要求保留分配日的观测(即股价调整因子不为空的观测),并要求将分配前的价格作为一个新的变量在该观测中体现出来。 永久性代码 … xxxxxx xxxxxx xxxxxx xxxxxx … … 日期 … xxxxxx xxxxxx xxxxxx xxxxxx … … 收盘价 . 10.00 5.20 . . . . 股价调整因子 . . 2.00 . . . . 注:…表示有数据值,.表示缺失值。 编程变量名参考: 永久性代码:stkcd 日期:Date 收盘价:Clpr
股价调整因子:Facpr
12. 找出股价连续多日相等的情况待分析。
股价每天的上下波动,一般来说会导致第二天的收盘价与第一天不相同,但也有仍有可能经过了涨跌之后,第二天的收盘价仍与第一天相等。这种情况不太常见,所以对于连续两天以上收盘价相等的股票,很有可能是数据源的记录有误。例如:
最新股票代码 … 000032 000066 000066 000066 000078 000403 000403 000403 000416 日期 2005-07-25 2005-07-05 2005-07-06 2005-07-07 2005-07-29 2005-07-19 2005-07-20 2005-07-21 2005-07-20 收盘价 … 4.46 7.79 7.79 7.79 3.26 2.89 2.89 2.89 4.42
共分享92篇相关文档