使用条件在SAS中创建新列

使用条件在SAS中创建新列,sas,Sas,我在SAS中有一个数据集,其中包含列SN和RT,我想创建另一个列,该列的条件是,在RT列表中,无论何时,只要1出现在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

我在SAS中有一个数据集,其中包含列SN和RT,我想创建另一个列,该列的条件是,在RT列表中,无论何时,只要1出现在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

假设您的输入表(表1)按序号排序,则以下代码应执行所需操作:

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
的第一个值时,将标志
\ux
设置为1,这基本上表示“开始检查RT=1”。当我们找到第一个
RT=1
时,我们设置
newvar=1
,然后重置
\ux
标志,以便只有在同一
SN
组中找到
RT=1
第一次出现时,才会设置newvar。

希望这就是您所寻找的。这不是最优雅的解决方案,但它应该做到这一点

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;

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

 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;