2017-05-10 6 views
0

は、各Codinvとクラスのために、コラムD.合計前の年の行、3グループ

に記載された前の年の値は、あなたのRigertaをありがとうございます。ここに私の新しい要求があります。 D.は、したがって、私は新しい列を希望として

Codinv Class  year  D  NewColumn 
---------------------------------------------------------- 
    13  C08F  1977  5   5 
    76  C01B  1999  1   1 
    76  C21D  2005  2   2 
    76  C23C  1998  2   2 
    76  C23C  1999  2   4 

私は変化するであろうが、以下のように今、私はクラスごとCodInvごとに1つの行がある場合には、そのことについて考えていること、それが計算されるように同じ値が表示されるはずですコードは次のように、私はオンラインで読むと、それはまだ

動作しない、私は今、私はCodi​​nvと年だけでソートされた場所をしなければならなかったそれは別の分析でよく働い

data Want;               
set Have;               
by Codinv Class year;                
retain NewColumn;            
if first.Class then NewColumn=D; output; 
if last.year NewColumn=NewColumn+D;        
run; 

てみました私は3つでそれをやっているのですが、私は違うバリエーションを試しましたが、miすべての行または0のデータをssing ...あなたは私を助けることができますか?永遠に感謝します

答えて

1

私はあなたの試行に近いです、私は希望の出力を生成するように変更しました。私が行った変更の要約は次のとおりです。

  • retainステートメントが削除されました。私が使用した方法は自動保持を採用しているので、必要ありません。
  • クラスが変更されるたびにNewColumnを0に初期設定します。
  • 各行のNewColumnにDを加算します。 (x + yは、ここで使用されるように、暗黙の保持を作成します)
  • outputステートメントを削除しました。これはデータステップの終わりに暗示されるため、必要ありません。それは厳密にby文で年間持つ、話す
  • 必要はありません必要はありませんよう

  • if last.year...行を削除しますが、データが適切にソートされていることを確認しておくことが有益です。

    data have; 
    input Codinv Class $ year D; 
    datalines; 
    13  C08F  1977  5 
    76  C01B  1999  1 
    76  C21D  2005  2 
    76  C23C  1998  2 
    76  C23C  1999  2 
    ; 
    run; 
    
    data Want;               
    set Have;               
    by Codinv Class year;                
    if first.Class then NewColumn=0; 
    newcolumn+D; 
    run; 
    
+0

こんにちはLongfish、可用性をありがとうございました。 NewColumnコードを実行すると、列Dの累積合計がグループ化されずに表示されます。その理由は何ですか?私はそれが実際にこれであるClassという名前の方法に関連する問題かどうか疑問に思っています: '4DigitCLMN'は文字としてフォーマットされています。あなたの提案データに基づいて実行している実際のコードは以下の通りです。セットがある; codinv '4DigitCLMN'年;最初に.4DigitCLMN'n then NewColumn = 0; NewColumn + D;走る; – Luigi

+0

BY変数のVALUESを確認してください。変数 '4DIGITCLMN'がCODINVの各値内で一意の値ごとに1つの観測値しか持たない場合、累積するものはありません。おそらくBY文の変数の順序を変更する必要はありますか?また、NewColumnが入力データセットにないことを確認してください。 SETステートメントが観測値全体で合計を保持しようとする試みを打ち負かすたびに、データセットからの値にリセットされるためです。 – Tom

+0

こんにちはTomさん、ありがとうございました!私は各codinv内に複数の4桁のコードがあることを確認します。たとえば、掲示されたテーブルからは、グループ分けの結果として1999年のNewColumnに4のカウントを持つべきcodinv 76のための2つのC23Cがあります。新しい列は入力データセットにまだありません。もう一度おねがいします。コードが機能しない別の方法や理由があると思われる場合はお知らせください – Luigi