SUM相同的数字,如果结果为0,则删除两者

时间:2018-01-18 13:34:19

标签: sas

EXAMPLE TABLE

正如你在上面的图片中看到的那样,有三个数字,但其中两个是相同的,区别在于一个是负数而另一个是正数。如何对它们进行求和,如果结果为0则删除它们?然而,继续显示那些与负面不重复的那些。 谢谢你:))

2 个答案:

答案 0 :(得分:1)

可能这可以帮助你,我用php解决你的情况你可以使用自己的语言。如果有帮助请告诉我。

    $numbers=array(-4136000,2973000,4136000);
    $num_no_duplicate=array();
    for($n=0;$n<count($numbers);$n++){
    $current_num=$numbers[$n];
    foreach ($numbers as $number) {
    $temp_sum=$number+$numbers[$n];
    if($temp_sum!=0 && $numbers[$n]>0){
        $num_no_duplicate[]=$numbers[$n];
    }
  }
  }
  print_r(array_unique($num_no_duplicate));

答案 1 :(得分:0)

由于你谈到删除值和显示行我会假设你有3行的组。

data have;
  group + 1; 
  do seq = 1 to 3; 
    input x @; 
    output;
  end;
datalines;
10 20 -10
10 10 10 
10 -10 20
20 10 10 
20 10 -10
run;

具有两个do-while循环的数据步骤可以在每个组上运行。第一次“测量”该组的某些方面;在这种情况下,在大海捞针中寻找一根针,该针是在该组内的负面重复的一些值。

第二个do-while输出非针。

data want;
  array _x[3] _temporary_;  * the proverbial haystack;

  * each group is a 'haystack';
  do until (last.group);
    set have;
    by group;
    _x[seq] = x; * add one straw to the haystack;
    do _n_ = 1 to seq-1 while (needle = .);
      if _x[_n_] = -x then needle = x;  * check if the straw is actually the needle;
    end;
  end;

  * process the group again via second set statement;
  do until (last.group);
    set have;
    by group;
    if missing(needle) or (x ne needle and x ne -needle) then OUTPUT;
  end;
run;

更大的类似问题,一个具有任意数量项目并想要删除总和为零的最大项目组的组,有点复杂