我不确定这个标题是否正确,但这里是:
我有三个数据集Forecasts1,Forecasts2和Forecasts3。它们都是由日期变量和变量r1到r241组成的时间序列数据。
对于给定的r变量(我们只使用r1-r3,现在只预测1和2)每个数据集只有一行,其中值不为空,并且每个数据集中的行不同
预测1看起来像这样:
预测2看起来像这样:
我需要能够将它们组合在一起,使得r1-r3包含所有非空值,而不会创建重复的日期行来保存空值。
理想情况下,成品将如下所示:
我尝试了各种类型的合并和设置,但我不断收到重复的日期行。对于所有241个(或更多)变量,我将如何正确地执行此操作? (特别是在SAS或Proc SQL中?)
与包含数据的Google DOC链接:
预测1:https://docs.google.com/spreadsheets/d/1iUEwPltU6V6ijgnkALFiIdrwrolDFt8xaITZaFC4WN8/edit?usp=sharing
Forecasts2: https://docs.google.com/spreadsheets/d/1lQGKYJlz6AAR-DWtoWnl8SwzCNAmSpj7yxRqRgnybr8/edit?usp=sharing
答案 0 :(得分:2)
您是否尝试过UPDATE语句?
data forecast1 ;
input date r1-r3 ;
cards;
1 1 . .
2 . 2 .
3 . . 3
4 . . .
;
data forecast2 ;
input date r1-r3 ;
cards;
2 2 . .
3 . 3 .
4 . . 4
5 . . .
;
data want ;
update forecast1 forecast2 ;
by date ;
run;
proc print; run;
结果
date r1 r2 r3
1 1 . .
2 2 2 .
3 . 3 3
4 . . 4
5 . . .
答案 1 :(得分:1)
我倾向于使用proc sql
来解决这些类型的问题。假设数据集中每date
行一行,您可以使用full outer join
:
proc sql;
select coalesce(f1.date, f2.date) as date,
coalesce(f1.r1, f2.r1) as r1,
coalesce(f1.r2, f2.r2) as r2,
coalesce(f1.r3, f2.r3) as r3
from forecast1 f1 full outer join
forecast2 f2
on f1.date = f2.date
答案 2 :(得分:1)
考虑使用聚合的联合查询。唯一的缺点是在外部查询中写出所有241列的聚合。
proc sql;
SELECT sub.date, Max(sub.r1) AS R1, Max(sub.r2) AS R2, Max(sub.r3) AS R3, ...
FROM
(SELECT *
FROM Forecasts1 f1
UNION ALL
SELECT *
FROM Forecasts2 f2) As sub
GROUP BY sub.date
quit;
答案 3 :(得分:1)
另一种解决方案是追加所有并删除所有缺失的行。
data want;
set forecast1-forecast3 indsname=fc;
model = fc; *store name of forecast model;
if nmiss(of r1-r3) = 3 then delete;
run;