2017-06-17 1 views
0

これはかなり単純な問題ですが、残念ながら問題をまだ解決できませんでした。私は、会社が活動を止める時期を示す変数を含むいくつかの企業のデータセットを持っています。残念なことに、このデータセットは、前年を調整することなく毎年更新され、その結果、実際の退出/停止年は一度しか入力されません。たとえば、以下の表の会社1を考えてみましょう。同社は2010年に退社するが、2010年までの毎年、まだアクティブなダミー(「9999」)が代わりに書かれている。会社1の場合、私は会社3のような期間の終わりにまだ活動している会社のために "9999"を残しながら、 "9999"を "2010"(すなわち退出の年)で置き換えたいと思っています。観測ごとに変数の最小値を単独で保持する方法は?

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 
...    ...  ... 

私は各社の最低値を見つけようとしましたが、「EXIT/STOP YEAR」のすべての値を最低値に置き換えましたが、これまでのところ正しく機能していないので、どのようにこの操作を行うには?

ベスト、

+0

会社1と会社3の違いは何ですか?おそらくあなたはあなたの質問で会社2について話すことを意味しましたか?最後のレコードで9999ではない終了値があります。 – Tom

+0

すべてのレコードのEXIT値をその会社の最後のレコードの値に変更したいだけですか? – Tom

+0

ご迷惑をおかけして申し訳ありませんが、会社1は2010年に退社する予定だったので、会社1では9999ではなく2010年になるはずです。私は、会社1のすべての終了値で2010、終了値2008年の会社4については、会社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

関連する問題