2016-09-20 182 views
0

這是一個SAS問題。兩人的以下行按升序AdmitNum排序。升序AdmitNum基於升序日期,省略。年齡爲每個AdmitNum提供。年齡在一些觀察值之間下降。我不希望發生這種情況。年齡必須相同或增加。SAS:保留幾個可能值的最大值

如果下一個年齡小於當前年齡,那麼我想將當前年齡寫入新的變量NeedAge。換句話說,保留更大的年齡,而更大的年齡。

人2的年齡錯誤43歲,三行。這應該是53.當AdmitNum = 5時,人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,如果是,則用HaveAge替換NeedAge。然後保留。

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;