【问题标题】:Create a new column in SAS with condition在具有条件的 SAS 中创建一个新列
【发布时间】:2014-11-18 17:26:01
【问题描述】:

我在 SAS 中有一个数据集,其中包含列 SN 和 RT,我想创建另一列,条件是 1 在 RT 列表中由 SN应该做1,剩下的连续数字1做0,请看下面的例子。

表1

SN  RT
1 0
1 0
1 1
1 1
1 0
2 0
2 0
3 1
3 1
3 1
4 0
4 1
4 1
4 0

输出表如下:

 SN  RT Newvar
    1 0    0
    1 0    0
    1 1    1
    1 1    0
    1 0    0
    2 0    0
    2 0    0
    3 1    1
    3 1    0
    3 1    0
    4 0    0
    4 1    1
    4 1    0
    4 0    0

【问题讨论】:

    标签: sas


    【解决方案1】:

    我得到了这个问题的答案,谢谢你的回答

     data TABLE2 ;
          set TABLE1;
          by SN RT;
          IF first.SN AND first.RT then RETIRE = 1;ELSE RETIRE=0 ;
          WHERE RT=1;
          run;
    
    PROC SQL;
    CREATE TABLE  RETIREMENT(drop=RT)  AS
    SELECT T1.* 
    ,T2.RETIRE
    FROM TABLE1  T1
    LEFT JOIN TABLE2  T2 
    ON T1.SN =T2.SN ;
    QUIT;
    

    【讨论】:

      【解决方案2】:

      假设你的输入表(table1)是按SN排序的,下面的代码应该执行所需的操作:

      data newtable (drop=_x);
        set table1;
        by SN;
        if first.SN then _x = 1;
        if RT = 1 and _x then do;
          newvar = 1;
          _x = 0;
        end;
        else newvar = 0;
      run;
      

      当找到SN 的第一个值时,标志_x 设置为1,这基本上表示“开始检查RT = 1”。当我们找到第一个RT = 1 时,我们设置newvar = 1,然后重置_x 标志,以便仅当RT = 1第一次 出现在同一SN 中时才设置newvar '组'。

      【讨论】:

        【解决方案3】:

        希望这就是您想要的。这不是最优雅的解决方案,但应该可以解决问题。

        DATA given;
            INPUT sn $ rt;
        DATALINES;
        1 0
        1 0
        1 1
        1 1
        1 0
        2 0
        2 0
        3 1
        3 1
        3 1
        4 0
        4 1
        4 1
        4 0
        ;
        RUN;
        PROC SORT DATA = given;
            BY sn rt;
        RUN; 
        DATA new;
            SET given;
            BY sn rt;
                firstrt = first.rt;
                first_occure = rt*firstrt;
            DROP firstrt;
        RUN;
        PROC PRINT DATA = new;
        RUN;
        

        【讨论】:

          猜你喜欢
          • 2022-08-17
          • 1970-01-01
          • 1970-01-01
          • 2021-11-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-26
          • 1970-01-01
          相关资源
          最近更新 更多