0

我有一个关于 Microsoft Access 和 SAS 的数据集,其中包含大约一百万个期权价格,其中包含以下字段/列:

DATE, COMPANY, PUT/CALL, PRICE

PUT/CALL变量是一个指示变量,针对每个唯一的DATE-COMPANY组合以PUTCALL的形式出现。

数字示例:

DATE             COMPANY          PUT/CALL       PRICE
2001/01/01       XOM              PUT            10
2001/01/01       XOM              CALL           12
2001/01/01       ABB              PUT            11
2001/01/01       ABB              CALL           13

我需要的是安排我的桌子:

DATE, COMPANY, PUT PRICE, CALL PRICE

上面带有数字的示例,输出应为:

数字示例:

DATE             COMPANY          PUT PRICE      CALL PRICE
2001/01/01       XOM              10             12
2001/01/01       ABB              11             13

有人知道我如何使用 SAS、Microsoft Access 或任何其他软件来完成这项工作吗?

4

2 回答 2

1

在 SAS 中,这很容易。

假设您的第一个表是一个名为“HAVE”的数据集,并按日期/公司排序:

proc transpose data=have out=want suffix=price;
by date company;
id put_call;
var price;
run;

在 Access(或 SQL)中,您需要执行 SQL 查询,如下所示:

create table want as select date,company,
 max(case when put_call='put' then price else null end) as put_price, 
 max(case when put_call='call' then price else null end) as call_price 
 from have group by date,company;

在 SQL Server 中,您可能可以通过枢轴执行此操作。

于 2013-05-19T05:24:13.070 回答
1

Access 中的以下工作:

SELECT 
    [DATE], 
    [COMPANY], 
    MAX(IIf([PUT/CALL]="PUT", [PRICE], NULL)) AS [PUT PRICE], 
    MAX(IIf([PUT/CALL]="CALL", [PRICE], NULL)) AS [CALL PRICE] 
FROM [PRICES] 
GROUP BY [DATE], [COMPANY];

注意...

  • 一些列名中有空格或“有趣的字符”,并且

  • DATE是 Access 中的保留字,

...所以方括号[]很重要。

于 2013-05-19T09:16:55.420 回答