Sas 如何建立数据集的网络?

Sas 如何建立数据集的网络?,sas,Sas,我有以下数据集: data have; format id1 id2 $25. value 8.; input id1 id2 value; datalines; a b 10 a c 2 a d 6 b a 5 c a 3 c d 7 ; run; 我想得到以下一个: data want; format id1 id2 $25. value 8.; input id1 id2 value; datalines; a b 5 a d

我有以下数据集:

data have;
format id1 id2 $25. value 8.;
input id1 id2 value;
datalines;
a   b   10
a   c   2
a   d   6
b   a   5
c   a   3
c   d   7
;
run;
我想得到以下一个:

data want;
format id1 id2 $25. value 8.;
input id1 id2 value;
datalines;
a   b   5
a   d   6
c   a   1
c   d   7
;
run;
实际上我有 -在前两排寻找没有秩序的夫妇, -让这对夫妇的价值更大, -并给它赋值之间的差值

观察的顺序不相关,但ID的顺序是基本的(例如,最终数据集中的观察(cA1)不等同于(cA1),而是等同于(cA1-1))。 为了简单起见,我使用了字母,但是id可以是任何字符串($25.)

任何帮助都将不胜感激


非常感谢

按字母顺序对id1/id2进行排序,如果需要交换它们,请将
value
设置为
value*-1
。然后按id1 id2对
进行排序。然后根据需要对行进行求和,得到每个id1/id2组合的1。然后根据需要调回

data have;
format id1 id2 $25. value 8.;
input id1 id2 value;
datalines;
a   b   10
a   c   2
a   d   6
b   a   5
c   a   3
c   d   7
;
run;

data reversed;
  set have;
  if id1 < id2 then do;
    value = value * -1;
    _id1 = id1;
    id1  = id2;
    id2  = _id1;
  end;
  drop _:;
run;

proc sort data=reversed;
  by id1 id2;
run;

data want;
  set reversed;
  by id1 id2;
  if first.id2 then _value=0;
  _value + value;
  if last.id2 then do;
    value = _value;
    if value < 0 then do;
      _id1 = id1;
      id1  = id2;
      id2  = _id1;
      value = value * -1;
    end;
    output;
  end;
  drop _:;
run;
数据已经存在;
格式id1 id2$25。值8。;
输入id1 id2值;
数据线;
a b 10
a c 2
a d 6
b a 5
c a 3
c d 7
;
跑
数据颠倒;
集有;
如果id1