使用条件在SAS中创建新列
我在SAS中有一个数据集,其中包含列SN和RT,我想创建另一个列,该列的条件是,在RT列表中,无论何时,只要1出现在SN的第一个位置,则应执行1,剩余的连续数字1执行0,请查找下面的示例 表1使用条件在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
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;