SAS:获取变量的最大/最小值的观测值
我试图得到一个宏变量或普通变量的观测值,即一个变量的最小值/最大值 我可以通过proc-sql很容易地得到这个min/max的值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 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等)中。我尝试了其他方法,恐怕我有一些非常接近的值,可能还有舍入问题。。。