SAS中文论坛

标题: 数据APPEND的问题 [打印本页]

作者: shiyiming    时间: 2003-12-16 10:34
标题: 数据APPEND的问题
我有一个原始的数据库,假设为A,有n条记录,内容如下:
data a;
input datetime var1 var2 var3 var4 ……@@;
cards;
20030520082033 394 33 83 939 ……
……

run;
时间为年月日时分秒。
还有一个增量数据库B,有记录m条,其中m<n,而且B的m条记录就是A的前m条记录(A是按时间递增排序的),但是B只是选择了A的某些字段,包括字段datetime,现在我要根据datetime,在B后面增加n-m的记录。请问怎么加。

我现在的做法是
proc sql;
  create table temp as select datetime var1 var2 from A
  where datetime>(select max(datetime) from B);
quit;
proc append base=B data=temp force;
run;

不知道哪位大侠有什么更好的方法?
作者: shiyiming    时间: 2003-12-16 11:25
可以用data步程序即可实现:

proc sort data=a;
  by datetime;
run;

proc sort data=b;
  by datetime;
run;

data temp;
  update b a;
  by datetime;
run;
作者: shiyiming    时间: 2003-12-16 13:52
谢谢!可能我没有说清楚,
我的实际问题是,我的机组机每天会有数据生成,就是A表,它每天会增加数据,而我的主机每天晚上要读取它的数据,其实就是将它新增的数据读到表B中。可是,表B并不是将所有A采集的字段取出来,只需要一部分字段。

上面那位,您的方法似乎将A的所有字段都取下来了。这个不行,将所有字段都取下来了。
作者: shiyiming    时间: 2003-12-16 13:54
最最关键的是,要对A排序,那简直是要死人的!太慢了。
作者: shiyiming    时间: 2003-12-16 14:01
sql语言好像比较慢,哪位大侠能全用data步做??
作者: shiyiming    时间: 2003-12-16 17:10
[quote="apan":e108f]谢谢!可能我没有说清楚,
我的实际问题是,我的机组机每天会有数据生成,就是A表,它每天会增加数据,而我的主机每天晚上要读取它的数据,其实就是将它新增的数据读到表B中。可是,表B并不是将所有A采集的字段取出来,只需要一部分字段。

上面那位,您的方法似乎将A的所有字段都取下来了。这个不行,将所有字段都取下来了。[/quote:e108f]
应该写进A表的时候,就直接写进B表。这样的方式还好一些。
别的方式。随着A,B表的数据的增加。会越来越慢的。
作者: shiyiming    时间: 2003-12-17 08:12
我想过呀,可是第一,领导一定要我去取数据,她说这样安全;第二,管理机组的人叫我不要给他们增加负担。所以……




欢迎光临 SAS中文论坛 (http://mysas.net/forum/) Powered by Discuz! X3.2