SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1439|回复: 1
打印 上一主题 下一主题

求助:如何插补数据

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2004-4-5 17:05:19 | 只看该作者

求助:如何插补数据

我是搞气象分析的,在处理数据过程中遇到了一些问题,希望大家能够给予帮助。在sas编程中有没有关于缺失数据的插补程序。比如说:有一天的数据,数据步长为半个小时,那么一天就有48个数据,但是由于其他原因(仪器failure or bad weather condition)我们必须剔除这些数据,所以数据变得不连续,但是需要一天完整的数据。为了插补这些数据,必须用adjacent days data 来插补,就是前后几天同一时刻的数据的平均作为那天的数据。请问怎么样能够用nonlienar 回归来插补这些数据。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2004-4-7 10:15:48 | 只看该作者

一种苯方法,供参考。

用非线性回归方法不知道怎么做,但用SQL的UPDATE语句也可以实现线性插值。举个例子:
/** 1. 生成数据  **/
data temp1(drop=i j);
date=mdy(1,1,2004);
do i=1 to 5;
date=date+1;
  do j=1 to 5;
  time=j*1800;
  if i=3 and j=3 then obs1=.;
  else obs1=rannor(1)*4+5;
  output;
  end;
end;
format date yymmdd10. time time5. obs1 6.2;
run;

/** 2. 提取出缺失数据  **/

data temp2;
set temp1;
where obs1=.;
retain i 0;
i=i+1;
run;

/**3.如果数据缺失,用前后2天的数据补齐  **/
%macro update(i);

proc sql noprint;
select  date+0 into:date from temp2 where i=&i;
select  time+0 into:time from temp2 where i=&i;

reset undo_policy=optional;
update temp1
set obs1 = ( select avg(obs1) from temp1 where time=&time and (date>=&date-2 and date<=&date+2))
where time=&time and  date=&date;
reset undo_policy=required;
quit;
%mend update;

%update(1);

注:temp1的原始数据如下
date              time        obs1
2004-1-2        0:30        12.22
2004-1-2        1:00        4.68
2004-1-2        1:30        6.59
2004-1-2        2:00        0.67
2004-1-2        2:30        13.95
2004-1-3        0:30        2.50
2004-1-3        1:00        7.05
2004-1-3        1:30        4.65
2004-1-3        2:00        2.62
2004-1-3        2:30        5.13
2004-1-4        0:30        2.05
2004-1-4        1:00        4.00
2004-1-4        1:30        .
2004-1-4        2:00        7.74
2004-1-4        2:30        1.78
2004-1-5        0:30        2.02
2004-1-5        1:00        1.82
2004-1-5        1:30        6.36
2004-1-5        2:00        3.80
2004-1-5        2:30        -0.40
2004-1-6        0:30        6.73
2004-1-6        1:00        10.22
2004-1-6        1:30        10.70
2004-1-6        2:00        3.34
2004-1-6        2:30        11.46

temp1的补齐数据如下:
date        time        obs1
...
2004-1-4        0:30        2.05
2004-1-4        1:00        4.00
2004-1-4        1:30        [color=red:441dc]7.08 [/color:441dc]
2004-1-4        2:00        7.74
2004-1-4        2:30        1.78
2004-1-5        0:30        2.02
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-3-11 15:17 , Processed in 0.038835 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表