【问题标题】:How find one value from other row如何从另一行中找到一个值
【发布时间】:2015-10-28 11:22:11
【问题描述】:

我有下表:

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

  1. 找到b=1,然后
  2. 如果 c 喜欢

这是我想要的输出

【问题讨论】:

  • 在输出第 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。为什么 b 在第 15、16 和 17 行的输出中未设置为 1 的逻辑是什么?
  • 因为 15 行 c 字段是 'h_2_ok' 并且 11 行中的 h_2 的值为 2,并且 16 行 c 字段是 'h_3' ,并且 17 行 c 字段 'z_1_ok' 和 10 行是 'z_1 ' 空的。我需要的一切都捕捉到价值 1。
  • 我不明白其中的逻辑,也许翻译中丢失了一些东西。

标签: sas


【解决方案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    

【讨论】:

    猜你喜欢
    • 2020-06-15
    • 2021-03-15
    • 2020-05-09
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    相关资源
    最近更新 更多