-3
找到一个值,我有以下表格:如何从其他行
我需要在B列中添加1时(当发现第1,那么您需要添加了所有的1当这个条件满足:C喜欢不要把0和2,我只需要1):
- 发现有b = 1,然后
- 如果c像
这是我的期望的输出
找到一个值,我有以下表格:如何从其他行
我需要在B列中添加1时(当发现第1,那么您需要添加了所有的1当这个条件满足:C喜欢不要把0和2,我只需要1):
这是我的期望的输出
在给定的问题所示的输出不匹配的逻辑。例如,在输入数据中,第6行有a = y_2且b没有设置,第7行没有c值,这意味着输出应该有b = 0,但是输出显示b = 1。
据我可以理解,所需的逻辑可以是:
1)在您的输出要B = 1基于所述条件如果B = 1或(a的值= C的下一行
或
2)在你的输出你想要的值),b = 1根据条件如果a的值=的C基于这两个逻辑场景的下一行(忽略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
如果这些都不给你想要的输出,那么我建议你建议哪行是错误的逻辑应该是什么,还添加逻辑澄清的题。
Regards, 埃米尔。
在输出行15,16和17中,列c具有值h_2_ok,h_3和z_1_ok,这些值分别在行11(h_2),15(h_3)和10(z_1)中是“like”列a,所以根据你给出的逻辑,这些行应该被设置为1,因为c是“like”a。第15,16和17行的输出中b未设置为1的逻辑是什么? – Amir
由于15行c字段为'h_2_ok',11行h_2值为2,16行c字段为'h_3',17行c字段'z_1_ok'和10行'z_1'为空。我需要的一切都捕捉到了价值1. –
我不理解逻辑,也许在翻译中有些东西会迷路。 – Amir