使用proc sql有效地更新表

时间:2013-08-26 15:35:48

标签: sql sas

我需要使用同一个表的过去版本更新包含过去缺失信息的表。需要更新,因为最近的表中不再提供某些早期信息。 设tableA为time0的表,tableB为time1的表,依此类推。我真正感兴趣的是最后更新的表格。

到目前为止,我已尝试过这种方法;

create view _tableB
select * 
from tableA 
union 
select * 
from tableB a 
where a.id not in (select id from tableA);

然后我继续:

create view _tableC
select *
from _tableB
union 
select *
from tableC a
where a.id not in (select id from _tableB); 

依此类推,直到我到达我的决赛桌,我创建了一张桌子。

create table _tableT 
select * 
from _tableS 
union 
select * 
from tableT a
where a.id not in (select id from _tableS); 

你在这里看到更好的东西吗?

P.S:我必须提到,对于每个观察,我可以有很多语言。信息是这样的

id|lguage1|lguage2|lguage3|

我使用视图和this method将其设为wide2long。

id1|lguage1 
id1|lguage2 
id1|lguage3
id2|lguage1

信息不按ID和语言排序。
感谢。

1 个答案:

答案 0 :(得分:1)

考虑到几个假设,你可以大大简化这一点:
 1.每个单独的数据集都没有重复的ID  2.每个数据集按ID排序。

然后你只需这样做: 数据结果;     set _tableS ... _tableC _tableB _table;     通过id;     如果first.id; 运行;

这样,代码更紧凑,所有数据只读一次。 它将读入所有表并输出交织结果(即:结果也将按ID排序)

firs.id过滤器意味着他只保留他遇到的每个id值的第一条记录。由于最新的数据集首先被提及,他将为每个ID提供最新的记录,并抛弃其他ID。