使用条件在SAS中创建新列

时间:2014-11-18 17:26:02

标签: sas

我在SAS中有一个数据集,其中包含SN和RT列,我想要创建另一个列,条件应该是 RT 列表中 SN <1 < / strong>应该做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

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

假设您的输入表(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,这基本上表示&#39;开始检查RT = 1&#39;。当我们找到第一个RT = 1时,我们设置newvar = 1,然后重置_x标记,以便仅在RT = 1第一次出现时设置newvar可以在同一个SN&#39;组中找到。

答案 2 :(得分:0)

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

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;