我在Microsoft Access和SAS上有一个数据集,其中包含大约一百万个选项价格,其中包含以下字段/列:
DATE, COMPANY, PUT/CALL, PRICE
PUT/CALL
变量是一个指标变量,对于每个唯一的 DATE-COMPANY 组合,它们都是 PUT 或 CALL
数字示例:
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或任何其他软件来完成此操作吗?
答案 0 :(得分: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服务器中,您可以使用数据透视表执行此操作。
答案 1 :(得分: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中的保留字,
...所以方括号[]
很重要。