Ms access 如何使用SAS或MS Access重新排列此表?
我有一个关于Microsoft Access和SAS的数据集,大约有100万个选项价格,并按以下字段/列排列: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
日期、公司、卖出/买入、价格
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];
请注意
- 一些列名中有空格或“有趣的字符”,并且
是Access中的保留字DATE
…因此方括号
[]
很重要。John Smith,您可能会注意到Joe使用了“put\u call”而不是“put/call”,因为“/”在SAS变量中不是有效字符。@probackpacker-您的建议很好,所以我在中对其进行了编辑。我建议在将来,对答案的修改应该在评论中进行,而不是编辑,除非只是格式化;除非我审查的速度比审查队列观察者快,否则如果他们正在更改代码,他们几乎总是会拒绝即使是很小的更改。仅供参考,这是昨天刚刚讨论过的,下面是示例。