具有最大标准的数组的最小值

时间:2016-01-21 18:36:36

标签: arrays sas

我目前正在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;

4 个答案:

答案 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 ;