Sas 如何为每次观察单独保持变量的最低值?

Sas 如何为每次观察单独保持变量的最低值?,sas,Sas,希望这是一个相当简单的问题,不幸的是我还没有能够解决这个问题。我有一个多家公司的数据集,其中包含一个变量,指示该公司何时停止其活动。不幸的是,该数据集每年都会更新,没有调整任何前几年,因此实际退出/停止年份只输入一次。以下表中的公司1为例。该公司于2010年退出,但在2010年之前的每一年,都会编写一个虚拟(“9999”)来表示仍然处于活动状态。对于公司1,我想用“2010”(即退出年份)替换“9999”,而对于期末仍活跃的公司,如公司3,则保留“9999” company y

希望这是一个相当简单的问题,不幸的是我还没有能够解决这个问题。我有一个多家公司的数据集,其中包含一个变量,指示该公司何时停止其活动。不幸的是,该数据集每年都会更新,没有调整任何前几年,因此实际退出/停止年份只输入一次。以下表中的公司1为例。该公司于2010年退出,但在2010年之前的每一年,都会编写一个虚拟(“9999”)来表示仍然处于活动状态。对于公司1,我想用“2010”(即退出年份)替换“9999”,而对于期末仍活跃的公司,如公司3,则保留“9999”

company          year      exit/stop year
company 1        2007      9999 
company 1        2008      9999
company 1        2009      9999
company 1        2010      9999
company 2        2007      9999
compnay 2        2008      9999
company 2        2009      2009
company 3        2007      9999
company 3        2008      9999
company 3        2009      9999
company 3        2010      9999
company 4        2007      9999
company 4        2008      2008
...              ...       ...
我曾尝试为每个公司找到最低值,并用最低值替换“退出/停止年”中的所有值,但到目前为止,它没有正常工作,因此我想知道是否有人知道如何执行此操作


最好的是,你可以把最后一条记录合并到数据中。或者,更简单的方法是,将不是9999的记录重新合并

data have ;
  input company &:$20. year exit ;
cards;
company 2    2007  9999
company 2    2008  9999
company 2    2009  2009
company 3    2007  9999
company 3    2008  9999
company 3    2009  9999
company 3    2010  9999
company 4    2007  9999
company 4    2008  2008
;
data want ;
  merge have 
        have(keep=company exit rename=(exit=final) 
             where=(final ne 9999) )
  ;
  by company ;
  exit = coalesce(final,exit);
run;

公司1和公司3之间的区别是什么?也许你的问题是想谈谈第二公司?该记录的退出值在上一条记录中不是9999。是否只想更改所有记录的退出值,使其具有该公司上一条记录的值?对于由此带来的不便,我深表歉意,但公司1应在2010年退出,因此公司1应在2010年退出,而不是9999年退出。我想以一个数据集结束,其中公司1的所有退出值都是2010年,公司4的所有退出值都是2008年,公司2的所有退出值都应该是2009年。