Ms access 如何使用SAS或MS Access重新排列此表?

Ms access 如何使用SAS或MS Access重新排列此表?,ms-access,sas,Ms Access,Sas,我有一个关于Microsoft Access和SAS的数据集,大约有100万个选项价格,并按以下字段/列排列: 日期、公司、卖出/买入、价格 PUT/CALL变量是一个指标变量,对于每个独特的日期-公司组合,它以PUT或CALL的形式出现 数字示例: DATE COMPANY PUT/CALL PRICE 2001/01/01 XOM PUT 10 2001/01/01

我有一个关于Microsoft Access和SAS的数据集,大约有100万个选项价格,并按以下字段/列排列:

日期、公司、卖出/买入、价格

PUT/CALL
变量是一个指标变量,对于每个独特的日期-公司组合,它以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
2001/01/01       XOM              10             12
2001/01/01       ABB              11             13
我需要的是安排我的桌子:

日期、公司、卖出价、买入价

在上面的数字示例中,输出应为:

数字示例:

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
2001/01/01       XOM              10             12
2001/01/01       ABB              11             13

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

在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中,您可能可以使用pivot来执行此操作。

以下功能在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中的保留字


…因此方括号
[]
很重要。

John Smith,您可能会注意到Joe使用了“put\u call”而不是“put/call”,因为“/”在SAS变量中不是有效字符。@probackpacker-您的建议很好,所以我在中对其进行了编辑。我建议在将来,对答案的修改应该在评论中进行,而不是编辑,除非只是格式化;除非我审查的速度比审查队列观察者快,否则如果他们正在更改代码,他们几乎总是会拒绝即使是很小的更改。仅供参考,这是昨天刚刚讨论过的,下面是示例。