标题: 想了一个很久的问题了 [打印本页] 作者: shiyiming 时间: 2011-9-9 23:29 标题: 想了一个很久的问题了 data test;
input x y z;
cards;
1 1 5
2 4 11
3 2 7
;
数据集test中有 x y z 变量,x y为坐标点,z为坐标点的取值;原始要有3个坐标点,最后需要生成3x3=9个坐标点,并对另6个坐标点进行z的插值。
x y z
1 1 5
1 4 .
1 2 .
2 1 .
2 4 11
2 2 .
3 1 .
3 4 .
3 2 7
已知三个坐标点(1,1),(2,4),(3,2)对应的z值,现采用最近邻法进行插值。如:坐标点(1,4),将其与已知的三坐标点间的距离做判断,离点(1,4)最近的那个坐标点的z值进行插入。请问该如何进行编程呢?想了很久的问题了,没做出来..期待高手点拨...作者: shiyiming 时间: 2011-9-10 03:38 标题: Re: 想了一个很久的问题了 [code:1o4c9rlx]data have2;
array t[9] _temporary_;
if _n_ =1 then do i =1 to 3;
set test;
t[3*i-2] =x; t[3*i-1] =y; t[3*i-0] =z;
end;
set have;
call missing(d);
do i =1 to 3;
d2 =(x-t[3*i-2])**2 +(y-t[3*i-1])**2;
d =min(d, d2);
if d =d2 then Zt =t[3*i-0];
end;
Znew =z;
if missing(Znew) then Znew =Zt;
drop i d d2 Zt;
run;[/code:1o4c9rlx]
jingju作者: shiyiming 时间: 2011-9-11 00:57 标题: Re: 想了一个很久的问题了 @jingju thanks very much!!作者: shiyiming 时间: 2011-9-11 10:22 标题: Re: 想了一个很久的问题了 [code:1gmix8oz]data result (drop= x0 y0 z0 d min);
set have;
do i=1 to n;
set test(rename=(x=x0 y=y0 z=z0)) nobs=n point=i;
d=(x-x0)**2+(y-y0)**2;
if i=1 then do;min=d;z=z0;end;
else if min>d then do;min=d;z=z0;end;
end;
run;[/code:1gmix8oz]作者: shiyiming 时间: 2011-9-14 19:28 标题: Re: 想了一个很久的问题了 @byes thanks!!