如何通过迭代多个列表生成数据表? (KDB)

时间:2018-02-08 14:34:40

标签: kdb q-lang

我有一个函数quotes[ticker;startDate;endDate]和一个函数indexConstituents[index;startDate;endDate],它产生以下结果:

daterange: 2017.12.05,2017.12.06;

quotes'[AAPL;daterange]

date        time    sym    price
2017.12.05  09:45   AAPL   101.20
2017.12.06  09:45   AAPL   102.30

quotes'[GOOG;daterange]

date        time    sym    price
2017.12.05  10:00   GOOG   800.50

quotes'[BBRY;daterange]

date        time    sym    price
2017.12.06  11:15   BBRY   02.10

indexConstituents'[DJIA;daterange]

date        sym    shares   divisor
2017.12.05  AAPL   20       2
2017.12.05  GOOG   5        1
2017.12.06  AAPL   10       1.5
2017.12.06  BBRY   100      1

我需要一种方法来正常运行indexConstituents函数以产生一组天内的成分列表(如上面的第二个表格),然后从表1中获取每个成分的数据。最后,我需要加入两个表中的数据以产生以下内容:

data:
date       time     sym    price    shares    divisor
2017.12.05 09:45    AAPL   101.20   20        2
2017.12.06 09:45    AAPL   101.30   10        1.5
2017.12.05 10:00    GOOG   800.50   5         1
2017.12.06 11:15    BBRY   02.10    200       1

前两个表的代码:

([] date:2017.12.05,2017.12.06; time:09:45,09:45; sym:`AAPL,`AAPL; price:101.20,102.30)

([] date:2017.12.05,2017.12.05,2017.12.06,2017.12.06; sym:`AAPL,`GOOG,`AAPL,`BBRY; shares:20f,5f,10f,100f; divisor:2f,1f,1.5f,1f)

1 个答案:

答案 0 :(得分:2)

我认为最好的方法是将结果表从indexConstituents'[DJIA;daterange]分配给变量,以便我们可以提取sym列并将distinct应用于该列。

然后,您可以使用该符号列表作为quotes的第一个参数。

最后将两个结果表连接在一起。

idx:indexConstituents'[DJIA;daterange];
q:quotes\:/:[distinct idx`sym;daterange];
q lj 2!idx

希望这有帮助!