Sas 如何从另一行中找到一个值

Sas 如何从另一行中找到一个值,sas,Sas,我有下表: 当找到第一个1时,我需要在b列中添加1,然后当满足此条件时,需要将所有1相加:c与a类似。不要放置0和2,我只需要1: 找到b=1,然后 如果c喜欢a 这是我想要的输出 在问题中,给出的逻辑与显示的输出不匹配。例如,在输入数据中,第6行有a=y_2且未设置b,第7行有c且无值,这意味着输出应具有b=0,但您的输出显示b=1 据我所知,你想要的逻辑是: 1在输出中,您希望b=1,条件是b=1或a的值=下一行中c的值 或 2在输出中,如果下一行中a的值=c的值,忽略b的输入值,则希望b=

我有下表:

当找到第一个1时,我需要在b列中添加1,然后当满足此条件时,需要将所有1相加:c与a类似。不要放置0和2,我只需要1:

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


在问题中,给出的逻辑与显示的输出不匹配。例如,在输入数据中,第6行有a=y_2且未设置b,第7行有c且无值,这意味着输出应具有b=0,但您的输出显示b=1

据我所知,你想要的逻辑是:

1在输出中,您希望b=1,条件是b=1或a的值=下一行中c的值

2在输出中,如果下一行中a的值=c的值,忽略b的输入值,则希望b=1

基于这两个逻辑场景,我的两个备选解决方案利用了您显示的数据,设置如下:

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或a的值=c的值来确定b=1,请尝试:

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;
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 1   x_2
5   y_1 1    
6   y_2 0   y_1
7   y_3 0    
8   z_1 0    
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    
或者

解决方案2

在输出中,如果希望b=1,则根据条件,如果下一行中a的值=c的值,忽略b的输入值,则尝试:

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;
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 1   x_2
5   y_1 1    
6   y_2 0   y_1
7   y_3 0    
8   z_1 0    
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    

在输出行15、16和17中,列c的值为h_2_ok、h_3和z_1_ok,这些值分别类似于第11行h_2、15行h_3和10行z_1中的列a,因此根据您给出的逻辑,这些行应该将b设置为1,因为c类似于a。第15行、第16行和第17行的输出中b未设置为1的逻辑是什么?因为第15行c字段为“h_2_ok”,第11行中的h_2的值为2,第16行c字段为“h_3”,第17行c字段为“z_1_ok”,第10行为“z_1”空。我所需要的一切都抓住了价值1.我不理解逻辑,也许在翻译中有些东西丢失了。