2017-06-17 5 views
0

私は、会社の従業員のための変数がある数多くの企業を対象としたデータセットを用意しています。何年にもわたって従業員数が報告されていないため、前後に空白が表示され、前後に価値が含まれています。 データは次のようになります不足しているかどうかを確認する方法

COMPANY  YEAR  NO. EMPLOYEES 
Company 1 2007  4 
Company 1 2008  5 
Company 1 2009  5 
Company 1 2010  5 
Company 2 2007  11 
Company 2 2008  10 
Company 2 2009 
Company 2 2010  10 
Company 3 2007  3 
Company 3 2008  4 
Company 3 2009 
Company 3 2010  3 

私はこれらの年の指標を作り、そのような出来事のためのデータセットを検索し、その後一年前と空白のスポットを交換できるようにしたいと思います。交換の前年がない場合、または前の年が空白の場合は、空白の後の1年です。

COMPANY  YEAR  NO. EMPLOYEES 
Company 1 2007  4 
Company 1 2008  5 
Company 1 2009  5 
Company 1 2010  5 
Company 2 2007  11 
Company 2 2008  10 
Company 2 2009  10 
Company 2 2010  10 
Company 3 2007  3 
Company 3 2008  4 
Company 3 2009  4 
Company 3 2010  3 

が最初に私はコードが置き換えられないことが重要2年の間で、欠損値の問題を(持っているかどうかをチェックする必要があり、要約する:私は好きにデータセットの期待しています昨年の前後に値が欠落していた。次に、空白でない任意の2年の間に何らかの空白の年がある場合は、上記のようにこれらの空白の点を置き換えたいと思います。

+1

検索。これらの方法は、あなたの状況に適用する必要があります。欠損値が最初の観測値にある場合には、2次ルールを適用するように調整する必要がありますが、 – Tom

+0

[欠けているデータを置き換えるために保持するsasの問題]の可能な複製(https://stackoverflow.com/questions/39446618/sas-issue-with-retain-to-replace-missing-data) – Reeza

答えて

0

私が使用する方法: 1.データセット会社/年をソートします。 2.欠損値が会社グループの最初の観測値でない場合は、LAG関数を使用して欠損値を置き換えます。 3.逆ソート順序逆の順序 5.戻り

は注意してください元の順序にデータセットとデータセットの 4.手順2を繰り返し、私が持っているために、当社3のためにあなたの元のデータを変更しました2番目のシナリオの場合(値がない、前のレコードがない)。

DATA HAVE; 
    input COMPANY $ 0-10 YEAR 13-17 N_EMPLOYEES 24-27; 
    datalines; 
Company 1 2007  4 
Company 1 2008  5 
Company 1 2009  5 
Company 1 2010  5 
Company 2 2007  11 
Company 2 2008  10 
Company 2 2009   
Company 2 2010  10 
Company 3 2007   
Company 3 2008  3 
Company 3 2009  4 
Company 3 2010  3 
; 
run; 

PROC SORT DATA=HAVE 
    OUT=DOSOMEWORKHERE; 
    BY COMPANY YEAR; 
RUN; 


DATA DOSOMEWORKHERE (drop=PREV_N_EMPLOYEES); 
    set DOSOMEWORKHERE; 
    by COMPANY; 
    PREV_N_EMPLOYEES = LAG(N_EMPLOYEES); 
    if first.COMPANY then 
     do; 
      PREV_N_EMPLOYEES = .; 
     end; 
    if N_EMPLOYEES = . then N_EMPLOYEES = PREV_N_EMPLOYEES; 
run; 

PROC SORT DATA=DOSOMEWORKHERE 
    OUT=DOSOMEWORKHERE; 
    BY DESCENDING COMPANY DESCENDING YEAR ; 
RUN; 

DATA DOSOMEWORKHERE (drop=PREV_N_EMPLOYEES); 
    set DOSOMEWORKHERE; 
    by DESCENDING COMPANY; 
    PREV_N_EMPLOYEES = LAG(N_EMPLOYEES); 
    if first.COMPANY then 
     do; 
      PREV_N_EMPLOYEES = .; 
     end; 
    if N_EMPLOYEES = . then N_EMPLOYEES = PREV_N_EMPLOYEES; 
run; 

PROC SORT DATA=DOSOMEWORKHERE 
    OUT=WANT; 
    BY COMPANY YEAR; 
RUN; 

結果:繰越最後の観察を行うための方法について

Result

関連する問題