【问题标题】:SAS : get the observation number of the max/min value of a variableSAS:获取变量最大值/最小值的观测数
【发布时间】:2016-03-17 00:15:51
【问题描述】:

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

我可以通过 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 曲线

【问题讨论】:

    标签: sas database-partitioning proc-sql


    【解决方案1】:

    您可以使用retain 一次性通过数据执行此操作。如果相同的最小值/最大值出现多次,则存储第一个看到的观察值。

    数据要; 设置有 end=eof ; 保留 minval minobs maxval maxobs ; 如果 value maxval 或 missing(maxval) 则执行; 最大值 = 值; maxobs = _n_ ; 结尾 ; 如果 eof 则输出; 跑 ;

    【讨论】:

      【解决方案2】:

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

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

      如果您的最小变量是唯一的,则此方法有效

      【讨论】:

      • 我希望一步到位,但这正是我想要的。它似乎不起作用。运行您的代码时我没有收到任何错误,但是当我尝试调用 %put &obsnr 时,我得到了 WARNING: Apparent symbolic reference OBSNR not resolved. 确实我的最小变量可能不是唯一的。
      • 代码对我有用,有一些测试值。您确定 variable =&minvariable 在您的情况下匹配吗?否则 obsnr 将永远不会被创建。我想有一个解决方案可以一步解决这个问题,但我现在没有自发的想法。如果 minvariable 不是唯一的,则必须将每个匹配项存储在不同的变量中 (nobs1,nobs2,...)
      • 我尝试了其他方法,恐怕我有一些非常接近的值,可能是四舍五入的问题......
      猜你喜欢
      • 1970-01-01
      • 2021-12-25
      • 2012-08-09
      • 1970-01-01
      • 1970-01-01
      • 2014-09-04
      • 1970-01-01
      • 2010-10-15
      • 2016-03-28
      相关资源
      最近更新 更多