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