2015-10-28 97 views
-3

找到一个值,我有以下表格:如何从其他行

我需要在B列中添加1时(当发现第1,那么您需要添加了所有的1当这个条件满足:C喜欢不要把0和2,我只需要1):

  1. 发现有b = 1,然后
  2. 如果c像

这是我的期望的输出

+0

在输出行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

+0

由于15行c字段为'h_2_ok',11行h_2值为2,16行c字段为'h_3',17行c字段'z_1_ok'和10行'z_1'为空。我需要的一切都捕捉到了价值1. –

+0

我不理解逻辑,也许在翻译中有些东西会迷路。 – Amir

回答

0

在给定的问题所示的输出不匹配的逻辑。例如,在输入数据中,第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, 埃米尔。