2017-06-17 65 views
0

希望这是一个相当简单的问题,不幸的是我还没有能够解决问题。我有几个公司的数据集,其中包含一个变量,指示公司何时停止其活动。不幸的是,这个数据集每年都会更新,而不会调整前几年,因此退出/停止的实际年份只会进入一次。以下表中的公司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 
...    ...  ... 

我试图找到每个公司的最低值,并用最低值替换“退出/停止年”中的所有值,但到目前为止它没有正常工作,所以我想知道如果有人可能有一个想法如何做这个操作?

最好成绩,

+0

是什么公司1和公司3之间的区别?也许你打算在你的问题中谈论公司2?那个在最后一个记录上的出口值不是9999。 – Tom

+0

您是否想要更改所有记录的EXIT值以获取该公司最后一条记录的值? – Tom

+0

对不便之处,但公司1是在2010年退出,所以它应该是2010年,而不是公司1的9999。我想结束一个数据集,其中公司1的所有退出值表示2010年,所有退出值对于公司4来说,2008年和公司2的所有退出价值应该是2009年。 – Mathilde

回答

0

你可以只取最后一个记录,并把它合并到数据。或者更简单的方法是将不是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; 

enter image description here

相关问题