楼主: tagv
4040 35

请大家帮个忙,看看这个表怎么编? [推广有奖]

11
tagv 发表于 2009-8-26 11:15:48
我那个想法 确实有些问题;

data r1;
set r0;
if lagtradetime < = 5 then do;
lagtradetime_5second = lagtradetime;
lagtradetime = 0 ;
end;

run;

data r3;
set r1;

H=lag(lagtradetime);

if H = 0 then do;

k = lag (lagtradetime_5second);



d= lag(lagtradetime_5second);
c=lagtradetime + d;
lagtradetime =c;

put _n_= di=  lagtradetime = time_record= k= lagtradetime_5second= d=;
end;

run;

12
tagv 发表于 2009-8-26 11:17:56
我这个程序 带了些诊断的程序。可能过于繁琐。

一团糟

13
sushe1527 发表于 2009-8-26 11:30:35
你不是说结果有要求合并么?难道是合并时间的差值?
上面是最终结果么?是你思路下的某一步要求吧?
而且28:57.3 到29:02.8 是5.5秒超过5秒了吧?
是不是下面更靠谱?

Time        price        time_record        Lagtradetime        lagtradetime_5second
28:54.2        51        41334        14        
28:56.4        51        41336        0        2
28:57.3        51        41337        3       1
29:02.8        51        41342       5        5
29:09.8        51        41349        7        
29:19.8        51        41359        10        
29:26.5        51        41366        7        
29:41.1        51        41381        15

14
tagv 发表于 2009-8-26 11:38:58
对。是中间一步。只要形成 0 0 8 这样的序列。再一个数据步一次删掉所有的0 的纪录就可以了。

而且28:57.3 到29:02.8 是5.5秒超过5秒了吧?

超过没关系的,8又不删掉。

关键是动态识别。在交易中,可能有时候10分钟没有交易。也可能5秒钟几十笔交易。

这个动态的图景才是关键。

15
tagv 发表于 2009-8-26 11:43:21
你不是说结果有要求合并么?难道是合并时间的差值?


我说的不严谨。
应该是把任何一个交易所有后续5秒的交易全部删掉

16
tagv 发表于 2009-8-26 11:51:35
我现在非常想知道,我那段代码的真实计算过程。!我被sas搞晕了。我还有一段。更神!


Data r0;
Set sample.trade;
di =_n_;


if di > 1 then do;

k = lag1(time_record);
Lagtradetime = time_record -lag1(time_record);

If lagtradetime < = 5 then lagtradetime_5second = lagtradetime;
else  lagtradetime_5second = 0;

put _n_= di= lagtradetime = time_record= k= lagtradetime_5second= ;



end;

If di = 1 then do;
k = time_record;
Lagtradetime = 0;
Lagtradetime_5second = 0 ;
put _n_= di= lagtradetime = time_record= k= lagtradetime_5second= ;
end;

Run;

data r1;
set r0;
H=lag(lagtradetime);
if H = 0 then do;
k = lag (lagtradetime_5second);

put _n_= di= lagtradetime = time_record= k= lagtradetime_5second= ;

lagtradetime + lag(lagtradetime_5second);
end;

if lagtradetime < = 5 then do;
lagtradetime_5second = lagtradetime;
lagtradetime = 0 ;
end;

run;

17
tagv 发表于 2009-8-26 11:52:09
1367  Data r0;
1368  Set sample.trade;
1369  di =_n_;
1370
1371
1372  if di > 1 then do;
1373
1374  k = lag1(time_record);
1375  Lagtradetime = time_record -lag1(time_record);
1376
1377  If lagtradetime < = 5 then lagtradetime_5second = lagtradetime;
1378  else  lagtradetime_5second = 0;
1379
1380  put _n_= di= lagtradetime = time_record= k= lagtradetime_5second= ;
1381
1382
1383
1384  end;
1385
1386  If di = 1 then do;
1387  k = time_record;
1388  Lagtradetime = 0;
1389  Lagtradetime_5second = 0 ;
1390  put _n_= di= lagtradetime = time_record= k= lagtradetime_5second= ;
1391  end;
1392
1393  Run;

_N_=1 di=1 Lagtradetime=0 time_record=35745 k=35745 lagtradetime_5second=0
_N_=2 di=2 Lagtradetime=. time_record=36048 k=. lagtradetime_5second=.
_N_=3 di=3 Lagtradetime=23 time_record=36071 k=36048 lagtradetime_5second=0
_N_=4 di=4 Lagtradetime=121 time_record=36192 k=36071 lagtradetime_5second=0
_N_=5 di=5 Lagtradetime=207 time_record=36399 k=36192 lagtradetime_5second=0
_N_=6 di=6 Lagtradetime=28 time_record=36427 k=36399 lagtradetime_5second=0
_N_=7 di=7 Lagtradetime=429 time_record=36856 k=36427 lagtradetime_5second=0

18
tagv 发表于 2009-8-26 11:53:08
那个k, 怎么变成缺失值了? _n_=2

19
tagv 发表于 2009-8-26 11:54:18
这个lag函数的运行机理是咋样的啊!晕死!

20
sushe1527 发表于 2009-8-26 11:54:49
应该是把任何一个交易所有后续5秒的交易全部删掉
-----------------
非得变成0么? if timedifferece<5 then delete 不就好了

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-23 11:22