【问题标题】:SAS: retain the largest value of several possible valuesSAS:保留几个可能值中的最大值
【发布时间】:2016-09-20 21:51:57
【问题描述】:

这是一个 SAS 问题。以下两个人的行按 AdmitNum 升序排列。 Ascending AdmitNum 基于升序日期,省略。为每个 AdmitNum 提供了年龄。一些观察之间的年龄减少。我不希望这种情况发生。年龄必须相等或增加。

如果下一个年龄小于当前年龄,那么我希望将当前年龄写入新变量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  

【问题讨论】:

    标签: sas lag retain


    【解决方案1】:
    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;
    

    【讨论】:

    • 在 FIRST.ID 而不是 _N_=1 上重置。
    • 您的第一个 if 语句中还缺少“then”
    • 是的,必须在 FIRST.ID 上重置。感谢两位受访者。
    【解决方案2】:

    检查 HaveAge 是否超过 NeedAge,如果是,则将 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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多