我有下表:
我需要在b列中添加1(当找到第一个1时,那么当满足条件时你需要将所有1加起来:c像a。不要把0和2,我只需要1):
这是我想要的输出
答案 0 :(得分:0)
在问题中给出的逻辑与显示的输出不匹配。例如,在输入数据中,第6行的a = y_2且未设置b,第7行的c没有值,这意味着输出应该为b = 0,但输出显示b = 1.
据我所知,你想要的逻辑是:
1)在您的输出中,如果b = 1或(a的值=下一行中c的值),则基于条件,b = 1
或强>
2)在您的输出中,如果a的值=下一行中的c值(忽略输入值),则基于条件,您希望b = 1 b)
基于这两种逻辑场景,我的两种替代解决方案利用您显示的数据,设置如下:
data have;
input @1 a $char3.
@5 b
@7 c $char3.
;
datalines;
x_0 1
x_1 . x_0
x_2 . x_1
x_3 . x_2
y_1 1
y_2 . y_1
y_3 0
z_1 .
;
解决方案1
在你的输出中,如果你希望b = 1,基于条件,如果b = 1或(a的值=下一行中c的值),那么试试:
data want(drop=c2);
merge have
have(drop=a rename=c=c2 firstobs=2);
b=(b or (a=c2)); /* the brackets are for clarity */
run;
这给出了输出:
Obs a b c
1 x_0 1
2 x_1 1 x_0
3 x_2 1 x_1
4 x_3 1 x_2
5 y_1 1
6 y_2 0 y_1
7 y_3 0
8 z_1 0
<强>替代地强>
解决方案2
在输出中,如果你想根据条件 b = 1,如果a的值=下一行中c的值(忽略b的输入值),那么试试:
data want(drop=c2);
merge have
have(drop=a rename=c=c2 firstobs=2);
b=(a=c2); /* the brackets are for clarity */
run;
这给出了输出:
Obs a b c
1 x_0 1
2 x_1 1 x_0
3 x_2 1 x_1
4 x_3 0 x_2
5 y_1 1
6 y_2 0 y_1
7 y_3 0
8 z_1 0
如果这些都没有给出你想要的输出,那么我建议你建议哪些行是错的,逻辑应该是什么,还要在问题中添加逻辑说明。
此致 阿米尔。