我试图将观察值的数量作为宏变量或普通变量,即一个变量的最小/最大值。
我可以通过 proc sql 轻松获得此最小值/最大值的值
proc sql noprint;
select min(variable) into :minvariable
from have;
quit;
或通过过程摘要
proc summary data=want;
var variable;
output out=mintable min=minvariable;
run;
但是我并没有用这两种方法找到这个最小值对应的观察数的简单方法。
背景:我想根据这个观测值来分离我的排序数据库,因为我知道以正确的方式排序有一个全局最小值,并且我感兴趣的变量遵循 U 曲线
您可以使用 retain
在一次遍历数据中执行此操作。如果相同的最小/最大值多次出现,则存储对第一个看到的观察结果。
数据需要 ; 设置有结束=EOF; 保留 minval minobs maxval maxobs ; 如果值maxval或缺失(maxval),则执行; 最大价值 = 值 ; maxobs = _n_ ; 结束; 如果 eof 则输出 ;跑;
我希望我理解正确。您想知道您的最小变量在有序表中的位置吗?然后,您可以运行一个数据步骤,并在最小变量匹配时将位置(在数据步骤中为 _n_)写入宏变量(如果您愿意,也可以使用数据变量)。
data _null_;
set have;
if variable =&minvariable then
call symputx("obsnr", _n_);
run;
如果您的最小变量是唯一的,则此方法有效