我的vi突然不能输入中文了,所以就容忍一下垃圾英文。说明在最开头。建议拷贝到SAS editor或者其他editor看。
=============================最后部分
- /*
- * zx_wind_bench.bizdate=TB_OBJECT_1101.f13_1101 in ( 20140311:&date_str)
- * baseline = min(20140311, &date_str)
- * zx_wind_bench.seccode=TB_OBJECT_1101.f16_1090='000535'
- * p='R000003'
- * 1. compute the daily average add increase rate for each bizdate at the base level.
- * a. compute the daily average 'add' for seccode '00053' between '20140301' and &date_str from table TB_OBJECT_1101.
- * b. find the baseline daily average add.
- * c. compute the daily average add increase rate for each bizdate at the base level. {rate = daily_avg_add/avg_add_base -1}
- * 2. compute bizdate add_nav increase rate at base level. -> add_r
- * 3. compute bench increase rate at base level.
- * a. select bench from table zx_wind_bench for seccode '000535' where its date between '20140311' and &date_str
- * b. find the baseline bench to the bench which is corresponding to the first bizdate between the date interval.
- * c. compute the increase rate for each bizdate as the base level. {rate = daily_bench/bench_base -1 }
- * 4. insert those two value into (increase bench/add rate) into table fkdb.pf_all_bench
- * a. delete corresponding records from table fkdb.pf_all_bench
- * b. insert
- *
- * Entity Definition and Mapping: FKDB.PF_ALL_BENCH
- * 'R000003' as p
- * , zx_wind_bench.sec_name as panamecn :chinese name corresponding to seccode 000535
- * , zx_wind_bench.bizdate=TB_OBJECT_1101.f13_1101 in ( 20140311:&date_str) as bizdate
- * , avg(TB_OBJECT_1101.F21_1101) across date as nav
- * , avg(TB_OBJECT_1101.F21_1101) across date as add1
- * , avg(TB_OBJECT_1101.F21_1101).[{bizdate=*}/{bizdate=20140311}] - 1 across date as add_r
- * , zx_wind_bench.bench.(&date_str/20140311)-1 as r
- */
- *****航天 140301 ;
- %let date_str = '20140301';
- proc sql;
- connect to oracle as conname (&risk);
- create table jingzhi as select * from connection to conname
- (
- select bizdate
- , avg(add_nav) as add1
- from (
- select f16_1090 as seccode,
- ob_object_name_1090 as sec_name,
- OB_OBJECT_NAME_1018 as com_name, /* wind 取复权净值*/
- F4_1101 as nav,
- F21_1101 as add_nav,
- F13_1101 as bizdate
- from TB_OBJECT_1101
- left join TB_OBJECT_1090 on F14_1101 = F2_1090
- left join TB_OBJECT_1099 on F14_1101 = F1_1099
- left join tb_object_1018 on F12_1099 = F34_1018
- where f13_1101 between '20140301' and &date_str
- and f16_1090 in ('00053')
- )
- group by bizdate
- order by bizdate
- );
- disconnect from conname;
- quit;
- data jingzhi;
- set jingzhi;
- if _N_=1 then call symput('a',add1);
- run;
- data jingzhi;
- set jingzhi;
- add_r=add1/&a-1;
- nav=add1;
- run;
- data jingzhi;
- set jingzhi;
- proc sort;
- by bizdate;
- run;
- proc sql;
- connect to oracle as conname (&risk);
- create table pf_all_bench16 as select * from connection to conname
- (
- select bizdate
- , bench
- , sec_name as panamecn
- from zx_wind_bench
- where seccode='000535'
- and bizdate between '20140311' and &date_str
- order by bizdate
- );
- disconnect from conname;
- quit;
- data pf_all_bench16;
- set pf_all_bench16;
- if _N_=1 then call symput('a',bench);
- run;
- data pf_all_bench16;
- set pf_all_bench16;
- r=bench/&a-1;
- p='R000003';
- run;
- proc sort;
- by bizdate;
- run;
- data pf_all_bench16;
- merge pf_all_bench16 (in=a) jingzhi(in=b);
- by bizdate;
- if a and b;
- run;
- proc sql;
- create table pf_all_bench17 as select * from
- (
- select p
- , panamecn
- , bizdate
- , nav
- , add1
- , add_r
- , r
- from pf_all_bench16
- );
- quit;
- proc sql;
- delete from fkdb.pf_all_bench where p='R000003' and bizdate= &date_str;
- insert into fkdb.pf_all_bench select * from pf_all_bench17 where bizdate= &date_str;
- quit;