如何从其他行中找到一个值

时间:2015-10-28 11:22:11

标签: sas

我有下表:

我需要在b列中添加1(当找到第一个1时,那么当满足条件时你需要将所有1加起来:c像a。不要把0和2,我只需要1):

  1. 找到b = 1,然后
  2. 如果c喜欢
  3. 这是我想要的输出

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    

如果这些都没有给出你想要的输出,那么我建议你建议哪些行是错的,逻辑应该是什么,还要在问题中添加逻辑说明。

此致 阿米尔。