|
|
9#

楼主 |
发表于 2009-11-24 11:57:02
|
只看该作者
Re: 排序临时变量相关问题
谢谢lwien001回复,简洁效果都达到了,array好像是矩阵语言,firt.变量和last.变量程序中好像没看到。
re:tonyleung,我刚学sas,自己也在编程,以下是我自己编的,5个记录覆盖了原记录,程序没用firt.变量和last.变量。个人觉得如果单用by语句激活排序临时变量firt.变量和last.变量来做,我觉得有些困难。
data Sza.Test2a;
set Sza.highfretest;
date1=substrn(tdate,1,4) || '/' || substrn(tdate,5,2) || '/' ||substrn(tdate,7,2);
time1=substrn(ttime,1,2) || ':' || substrn(ttime,3,2) || ':' ||substrn(ttime,5,2);
/*把交易日期和时间转化为sas能识别的形式*/
num_tdate=input(date1,yymmdd10.);
num_ttime=input(time1,time8.);
/*把交易日期和时间转化为数值形式*/
hour=hour(num_ttime);
minute=minute(num_ttime);
second=second(num_ttime);
/*调出交易时间的小时、分钟和秒的值*/
run;
proc sort data= Sza.Test2a;
by stkcd date1 hour minute second;
/*将数据集按股票代码、交易日期、交易小时、交易分钟和交易秒钟排序*/
run;
data Sza.Test2b;
set Sza.Test2a;
do;
where input(stkcd,6.)=600766 & day(input(date1,yymmdd10.))=1 & hour=9;
/*调出600766在2005年6月1日开盘后半小时的数据*/
total_cp+cp;
/*累加求和*/
if cp^=0 then do;
n+1;
/*求出价格不为0的交易笔数*/
end;
if cp ^=0 then avr_prc=total_cp/n;
/*求出价格不为0的交易平均股价*/
retain max_cp;
max_cp=max(max_cp,cp);
/*计算开盘半小时后的最高股价*/
end;
drop total_cp n;
run;
data Sza.Test2c;
set Sza.highfretest;
if _n_=49 then do;
/*_n_=49对应时间10:03:19*/
do _n_=50 to 54;
stkcd=.;tdate=.;ttime=.;cp=.;
/*在10:03:19后添加5个空白记录*/
output;
end;
end;
else output;
run; |
|