SAS中文论坛

标题: 怎么求一列变量的最大值 [打印本页]

作者: shiyiming    时间: 2008-4-17 11:13
标题: 怎么求一列变量的最大值
有两列数据
按升序排列
打个比方,如
obs   r1         r2
1     -0.01    -0.02
2     -0.008  -0.012
.    .      .
.    .      .
.    .      .
n      0.1       0.2  

我想求出r1的正负号分界点的那个负观测的obs值,以及r2正负值交界的那个负观测的 obs值
再比较之间的大小 ,再以小的obs为界,比较在这个obs前的r1/r2的最大值与这个obs后面r1/r2的最小值的大小
我的程序是这样的
但运用max与min函数得不到值
请那位告诉我下
谢谢
我的qq 396424213
邮箱 <!-- e --><a href="mailto:mlsh163@163.com">mlsh163@163.com</a><!-- e -->

data a;
ratio=r1/r2;

if ( r1&gt;0 and lag(r1)&lt;0) then do ;
a=obs-1;
if a=. then delete;
s=a;
put 's='s;
end;

if ( r2&gt;0 and lag(r2)&lt;0) then do;
b=obs-1;
if b=. then delete;
t=b;
put 'b=' b;
end;

if s&gt;t then goto ok;
else if s&lt;=t then do obs=1 to s;
m=MAX ratio;
end;
do obs=s to last.obs;n=min ratio;
end;
if n&gt;=m then put 'r1 dominate r2';
else put 'r1 donot dominate r2';
ok:put 'r1 donot dominate r2';
run;
作者: shiyiming    时间: 2008-4-18 14:44
标题: Re: 怎么求一列变量的最大值
data test;
input obs r1 r2;
cards;
1 -0.01 -0.02
2 -0.008 -0.012
3 -0.003 -0.008
4 0.01 -0.007
5 0.1 0.2
;
run;
data test1;
set test;
where r1&lt;0 and r2&lt;0;
r=r1/r2;
run;
/*````````````proc means; can provide min and max info```````````*/
proc sort data=test1;
by r;
run;
data test2;
set test1 nobs=n;
if _n_=1 then max=r;
if _n_=n  then min=r;
run;
不知道是不是要这个```````不是特别理解楼组的意思`````
作者: shiyiming    时间: 2008-4-18 20:23
标题: Re: 怎么求一列变量的最大值
[code:3g7yqup7]
data one two;
        set a;
        r=r1/r2;
        if r1&lt;0 and r2&lt;0 then output one;
        else if r1*r2&lt;0 then output two;
run;

proc means data=one nway noprint;
        output out=maxdata(keep=max_r) max(r)=max_r;
proc means data=two nway noprint;
        output out=mindata(keep=min_r) min(r)=min_r;
run;
[/code:3g7yqup7]
作者: shiyiming    时间: 2008-4-28 12:33
标题: Re: 怎么求一列变量的最大值
data work.a;
input r1 r2;
cards;
-0.01 -0.02
-0.008 -0.012
-0.005 -0.007
0.001 -0.001
0.003 0.0001
0.004 0.02
;
run;
data work.b;
set work.a ;
obs=_n_;
run;
proc sql noprint;
select obs into :b from work.b where
r1&gt;=0 ;
select obs into :a from work.b where
r2&gt;=0;
quit;
data work.h;
a=&amp;a;
b=&amp;b;
run;
proc sql noprint;
select min(a,b) into:c from work.h;
%put &amp;c;
quit;
data work.i;
set work.b;
if obs&lt;=&amp;c then
ratio1=r1/r2;
else
ratio2=r1/r2;
run;
proc sql noprint;
create table work.k as
select max(max(ratio1),max(ratio2)) as maxratio from work.i;
quit;




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