SAS:获取变量的最大/最小值的观测值

时间:2016-03-16 15:24:55

标签: sas database-partitioning proc-sql

我试图将宏观变量或普通变量作为一个变量的最小值/最大值的观察数量。

我可以通过proc sql

轻松获得此min / max的值
proc sql noprint;
select min(variable) into :minvariable
from have;
quit;

或通过proc摘要

proc summary data=want;
var variable;
output out=mintable min=minvariable;
run;

但我在这两种方法中都没有找到这个最小值对应的观察次数的简单方法。

背景: 我想基于这个观察数来分离我的分类数据库,因为我知道以正确的方式排序有一个全局最小值,我感兴趣的变量遵循U曲线

2 个答案:

答案 0 :(得分:2)

您可以使用retain一次性完成数据。如果相同的最小值/最大值出现多次,则会存储第一个看到的最小值/最大值。

data want ;
  set have end=eof ;
  retain minval minobs maxval maxobs ;

  if value < minval or missing(minval) then do ;
    minval = value ;
    minobs = _n_ ;
  end ;

  if value > maxval or missing(maxval) then do ;
    maxval = value ;
    maxobs = _n_ ;
  end ;

  if eof then output ;
run ;

答案 1 :(得分:0)

我希望我理解你的正确。您想知道您的minvariable在您订购的桌子上的哪个位置?然后你可以运行一个datastep并在你的min变量匹配时在一个宏变量(或者你喜欢的数据变量)中写一个Position(在datastep中是 _n _ )。

data _null_;

set have;

if variable =&minvariable then
call symputx("obsnr", _n_);
run;

如果你的minvariable是唯一的

,这是有效的