2016-08-25 18 views
1

変数prの最後の値を出力したい。サブグループをSASデータセットに、好ましくはほんの数ステップだけで統合することができる。下のコードはそれを行いますが、私は1つのステップでそれを行うことを望んでいましたby variable; if last.variable then output;ちょうど1つの変数によってケースについては。SAS:複数のグループの最後の値を出力する

data two; 
input year firm price; 
cards; 
1 1 48  
1 1 45 
2 2 50 
1 2 42 
2 1 41 
2 2 51 
2 1 52 
1 1 43 
1 2 52; 
run; 
proc sort data = two;by year firm;run; 

/* a) Create id across both sub-groups */ 
data two1; 
set two; 
by year firm; 
retain case_id; 
if FIRST.year OR first.firm then case_id + 1; 
run; 

/* b) Use id to output last values across both by-groups */ 
data two2; 
set two1; 
by case_id; 
if last.case_id then output; 
run; 

proc print data = two1;run; 
proc print data = two2;run; 

ただ1つの変数によって、a)とb)の2つのステップを組み合わせることができます。それは複数のグループで可能ですか?

+0

注:

最終的なコードすべきは次のようになります。だから、「最初に、あるいは最初に確認する」を「最初に確認する」ことができます。 – Tom

答えて

1

データステップa)では、条件if lst.firm then output two2を追加します。外側のグループの最後の/最初のレコードはまた、常に内側のグループのいずれかの最初/最後のレコードであることを

data two1 two2; 
    set two; 
    by year firm; 
    retain case_id; 
    if FIRST.year OR first.firm then case_id + 1; 
    if last.firm then output two2; 
    output two1; 
run; 
+0

ありがとう!出来た。私は私の投稿のステップb)のために 'case_id'を作成しました。だから私は本当に '最後の確認を必要としないので、出力します;'が行います。これは、 'firm'がby-statementの2番目で、最初のby-variableとの相対的な関係にあるためです(したがって、lastは最初の変数によって定義されたグループ内にあります)。 –

+0

はい、そうです。 'firm'は' year 'の後の文で2番目であるため、 'year'グループのサブグループになります。したがって、 'year'値が変更されたときには' firm'変数のフラグが最初と最後に設定されます。だから、 'last.firm'フラグがセットされていると、変数' year'や 'firm'のどれかが次のレコードの値を変更していることを意味します。 – Bagin

関連する問題