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

SAS:获取变量的最大/最小值的观测值,sas,database-partitioning,proc-sql,Sas,Database Partitioning,Proc Sql,我试图得到一个宏变量或普通变量的观测值,即一个变量的最小值/最大值 我可以通过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; 但我并没有用这两种方法找到这个最小值对应

我试图得到一个宏变量或普通变量的观测值,即一个变量的最小值/最大值

我可以通过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型曲线,我希望我理解你的意思是正确的。您想知道minvariable在有序表中的哪个位置?然后,当minvariable匹配时,您可以运行一个datastep并将位置(在datastep中是_n_)写入宏变量(或者数据变量,如果您愿意)

data _null_;

set have;

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

如果您的最小变量是唯一的,则可以使用
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 ; 数据需求; 设置结束=eof; 保留minval minobs maxval maxobs; 如果值<最小值或缺少(最小值),则执行该操作; minval=值; 米诺斯=_n_; 结束; 如果值>maxval或缺少(maxval),则执行该操作; maxval=值; maxobs=_n_u; 结束; 如果是eof,则输出; 跑
我希望一步到位,但这正是我所渴望的。但它似乎不起作用。运行代码时,我没有收到任何错误,但当我尝试调用
%put&obsnr
时,我收到
警告:明显的符号引用obsnr未解析。
而且我的minvariable可能不是唯一的。代码对我来说使用了一些测试值。您确定variable=&minvariable在您的案例中匹配吗?否则将永远不会创建obsnr。我想有一个办法可以一步解决这个问题,但我现在还不知道。如果minvariable不是唯一的,则必须将每个匹配项存储在不同的变量(nobs1、nobs2等)中。我尝试了其他方法,恐怕我有一些非常接近的值,可能还有舍入问题。。。