我目前正在SAS EG 6.1中获取数据,以根据观察结果获得最小值和最大值。现在我需要能够从数组中获取最小值,其中仅包含在数组中的数字是> = 90.
data MinMaxRows;
set tbl4;
where EvalDt1 <> .;
array x(3) date1-date3;
max_value=max(of x(*));
min_value=min(of x(*));
run;
答案 0 :(得分:2)
听起来你需要创建另一个数组,其标准为90,与日期相对应。这就是我设想的数据:
data &wl.tbl4;
infile datalines;
input @1 date1 mmddyy10.
@10 date2 mmddyy10.
@19 date3 mmddyy10.
@28 Evaldt1 mmddyy10.
@37 crit1
@40 crit2
@43 crit3;
format date1--evaldt1 mmddyy10.;
datalines;
1/1/2016 1/2/2016 1/3/2016 1/1/2016 85 90 95
;
run;
这就是您将该条件应用于数组的方法:
data MinMaxRows;
set tbl4;
where EvalDt1 <> .;
array x(3) date1-date3;
array x_90(3) _temporary_;
array crit(3) crit1-crit3;
do i = 1 to 3;
if crit(i) >= 90 then x_90(i) = x(i);
end;
format max_value min_value max_value_90 min_value_90 mmddyy10.;
max_value=max(of x(*));
min_value=min(of x(*));
max_value_90=max(of x_90(*));
min_value_90=min(of x_90(*));
run;
答案 1 :(得分:1)
始终采用'手动'方式......即搜索阵列。
data want;
set tbl4;
array crit(3) crit1-crit3;
array date(3) date1-date3;
crit_max90=.;
crit_index90=.;
do i=1 to dim(crit);
if crit(i)>90 and crit(i)>crit_max90 then do;
crit_max90=crit(i);
crit_index90=i;
end;
end;
run;
答案 2 :(得分:1)
如果你想用一个函数做这个,你总是可以使用FCMP(在9.4+中,我认为9.3它不会接受非临时数组):
proc fcmp outlib=work.funcs.func;
function minMin(min,num[*]);
curMin = constant('BIG');
do _i = 1 to dim(num);
if num[_i] ge min and num[_i] lt curMin then
curMin = num[_i];
end;
if curMin < constant('BIG') then
return(curMin);
else return(.);
endsub;
quit;
options cmplib=work.funcs;
data test;
array x[3];
x[1]=4;
x[2]=11;
x[3]=15;
x_min=min(of x[*]);
x_min_10 = minMin(10,x);
put x_min= x_min_10=;
run;
答案 3 :(得分:0)
删除少于90的任何值,然后执行min()
和max()
:
data want ; set have ; array dt{*} date1-date3 ; do i = 1 to dim(dt) ; dt{i} = ifn(dt{i} < 90 , . , dt{i}) ; end ; dtmax = max(of dt:) ; dtmin = min(of dt:) ; run ;