2016-09-20 8 views
0

これはSASの質問です。 2人の次の行は、昇順AdmitNumによって並べ替えられます。昇順AdmitNumは昇順の日付に基づいていますが、省略されています。各AdmitNumには年齢が設定されています。いくつかの観察の間に年齢が減少する。私はこれが発生しないようにしています。年齢は同じでなければならない。SAS:いくつかの可能な値のうち最大の値を保持

次の年齢が現在の年齢よりも小さい場合は、現在の年齢を新しい変数NeedAgeに書き込むようにします。言い換えれば、それはより大きな年齢である一方、より大きな年齢を保つ。

人2の年齢は3歳で43歳です。 AdmitNum = 5の場合、Person 2の年齢は54に変わり、この値54を保持する必要があります。

いくつかの試みの後、私は部分的に成功しました。誰かがNeedAgeを下に示すようにする方法を提案できますか?ありがとう。

ID AdmitNum HaveAge NeedAge    
1  1  51   51  
1  2  48   51 
1  3  51   51 
1  4  49   51 
2  1  53   53 
2  2  43   53 
2  3  43   53 
2  4  43   53 
2  5  54   54 

答えて

0
data have; 
input ID AdmitNum HaveAge; 
datalines;   
    1 1 51 
    1 2 48 
    1 3 51 
    1 4 49 
    2 1 53 
    2 2 43 
    2 3 43 
    2 4 43 
    2 5 54 
    ; 
run; 

data want; 
set have; 
by ID; 
if _n_ = 1 NeedAge = HaveAge; 
if HaveAge > NeedAge then NeedAge = HaveAge; 
retain NeedAge; 
run; 
+0

FIRST.ID代わりに_N_ = 1にリセット。 – Tom

+0

最初のif文に "then"もありません – superfluous

+0

はい、FIRST.IDでリセットする必要がありました。両方の回答者に感謝します。 – DoubleT

0

HaveAgeがNeedAgeを超えているかどうかを確認し、NeedAgeがHaveAgeを超えている場合は、NeedAgeをHaveAgeに置き換えます。その後、保持します。

data have; 
    input ID AdmitNum HaveAge; 
    datalines;   
     1 1 51 
     1 2 48 
     1 3 51 
     1 4 49 
     2 1 53 
     2 2 43 
     2 3 43 
     2 4 43 
     2 5 54 
    ; 
run; 

data want; 
    set have; 
    by ID; 
    if HaveAge > NeedAge then NeedAge = HaveAge; 
    retain NeedAge; 
run; 
関連する問題