当前位置:首页 > SAS综合题1-15
000078 000403 000403 000403 000416 000517 000547 2005-07-29 2005-07-19 2005-07-20 2005-07-21 2005-07-20 2005-07-08 2005-07-26 3.26 2.89 2.89 2.89 4.42 3.33 5.09 所以,需要将其从数据库中找出来,形成新的数据库,为与其他数据源的数据相比较做好准备。创建新的数据集,统计每只股票相同收盘价的观测值与相应的重复次数。 创建样本数据集:
data example1(label='找出收盘价相同的股票'); input Stkcd $ Date: Clpr ;
informat Stkcd $6. Date yymmdd10. Clpr 8.2 ; format Stkcd $6. Date yymmdd10. Clpr 8.2 ; label
Stkcd='最新股票代码|Stock Code' Date='日期|Date'
Clpr='收盘价|Close Price'; cards;
000032 2005-07-25 4.46 000066 2005-07-05 7.79 000066 2005-07-06 7.79 000066 2005-07-07 7.79 000078 2005-07-29 3.26 000403 2005-07-19 2.89 000403 2005-07-20 2.89 ; run;
data test; set example1;
proc sort data=test; by stkcd date; run; data a; set test; by stkcd date;
if first.stkcd then j=1; if clpr=lag(clpr) then j+1; label
j='迄今收盘价相同的次数'; run;
data b(keep=stkcd clpr j); set a; by stkcd; if last.stkcd; label
j='统计期内收盘价相同的次数'; run;
方法二:
proc sort data=example1 out=a; by stkcd date; run; data b; set a;
if stkcd=lag(stkcd) and clpr=lag(clpr) then a=1; run;
proc sort data=b out=c;
by descending stkcd descending date; run; data d; set c;
if a ne 1 and lag(a) ne 1 then delete; run;
proc sort data=d out=e; by stkcd date; run; data f; set e; drop a; run; data h; set f; retain n 1;
if stkcd ne lag(stkcd) then n=1; else n=n+1; run;
方法三:
proc sort data=test32; by stkcd date; run;
data test32; set test32;
if clpr= lag(clpr) then do;/*如观测的收盘价与上一交易日相同,则通过变量reserve标记为保留*/
reserve= \;
end;
/*该程序保留了与上一观测相同收盘价的观测,但并没有保存上一观测,所以通过下一程序,取回上一个观测*/
proc sort data=test32; by stkcd descending date; data test32; set test32;
if clpr= lag(clpr) then do; reserve= \; end; run;
data test32; set test32;
if reserve^=\ then delete;/*只保留reserve变量为yes的观测*/ drop reserve; run;
34. 将同一个公司的A,B股合并。
在处理公司信息表的时候,通常我们会遇到数据源将同一公司的A,B股分开处理,并写成两条观测的情形。如公司代码为C000002的股票,在这里是以两条记录的形式记录下了该公司发行了A股和B股的情况,在公司信息表中,需要将其整合成一条信息,并分别以A,B股的名称和形式来表示。而且有的公司先发行A股,有的公司却是先发行B股,这也是需要注意的问题。
原始样式: 公司代码 … 日期 … 公司中文名称 … 深圳发展银行股份有限公司 万科企业股份有限公司 万科企业股份有限公司 金田实业(集团)股份有限公司 金田实业(集团)股份有限公司 深圳世纪星源股份有限公司 深圳市振业(集团)股份有限公司 深圳市赛格达声股份有限公司 广东宝利来投资股份有限公司 … 股票代码 股票名称 股票类型 000001 000002 200002 深发展A 万科A 万科B … A A B B A A A A A A … C000001 2005-05-18 C000002 2000-08-15 C000002 2005-06-21 C000003 2000-08-29 C000003 2004-04-30 C000005 2005-05-27 C000006 2005-05-19 C000007 2005-07-30 C000008 2005-05-21 … …
最终需要形成的样式:
200003 PT金田B 000003 PT金田A 000004 国农科技 000005 000006 000007 000008 ST星源 深振业A 深达声A 宝利来 C000004 2005-07-09 深圳中国农大科技股份有限公司 公司代码 公司中文名称 日期 股票代A股名A股B股名B股股 码 称 股 称 票代码 票代码 A A 万科B … B B B … 000001 深发展A 200002 万科A … … … 深圳发展银行股份有限公司 万科企业股份有限公司 C000001 2005-05-18 C000002 2005-06-21 C000003 2004-04-30 金田实业(集团)股份有限公司 000003 PT金田A C000004 2005-07-09 深圳中国农大科技股份有限公司 000004 国农科技 C000005 2005-05-27 深圳世纪星源股份有限公司 C000006 2005-05-19 深圳市振业(集团)股份有限公司 000006 深振业A C000007 2005-07-30 深圳市赛格达声股份有限公司 000007 深达声A C000008 2005-05-21 广东宝利来投资股份有限公司 000008 宝利来 C000009 2005-07-01 C000010 2005-07-22 中国宝安集团股份有限公司 深圳市华新股份有限公司 000009 深宝安A 000010 深华新 A PT金田B A 深物业B 000005 ST星源 A A A A A A A C000011 2005-06-29 深圳市物业(发展)集团股份有限000011 深物业A 公司 … … …
创建样本数据集
data example3 (label='例3:同一个公司A,B股合成一条记录例子');
input comcd $10. Date: yymmdd10. Comchnm:$100. stkcd:$6. stknm:$12. stktype:$1.; format Date yymmdd10.; label
Comcd=\公司代码|Company Code\ Date=\日期|Date\ Comchnm=\公司中文全称|Company's Chinese Name - Header\ Stkcd=\股票代码|Stock Code \ Stknm=\股票名称|Stock Name \ stktype=\股票类型|Stocktype\cards;
C000001 2005-06-18 深圳发展银行股份有限公司 000001 深发展A A C000002 2000-08-15 万科企业股份有限公司 000002 万科A A C000002 2005-06-21 万科企业股份有限公司 200002 万科B B
C000003 2000-08-29 金田实业(集团)股份有限公司 000003 PT金田A A C000003 2004-04-30 金田实业(集团)股份有限公司 200003 PT金田B B
共分享92篇相关文档