SAS:获取变量max/min值的观测数

SAS : get the observation number of the max/min value of a variable

我正在尝试获取作为一个变量的 min/max 的观察值的数量作为宏变量或普通变量。

我可以通过 proc sql

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

或通过过程摘要

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

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

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

希望我理解正确。您想知道您的最小变量在您订购的 table 中的哪个位置?然后你可以只 运行 一个数据步并在你的最小变量匹配时将位置(在数据步中是 _n_ )写入宏变量(如果你愿意,也可以是数据变量)。

data _null_;

set have;

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

如果您的最小变量是唯一的,这就有效

您可以使用 retain 一次性通过数据完成此操作。如果相同的 min/max 值出现多次,则存储第一个看到的值。

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 ;