全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1300 11
2015-05-09
悬赏 100 个论坛币 已解决
针对id   怎样才能够取出不同id的两两所有可能组合,并根据x 进行合并,并生成两个变量,第一个变量是两个数据集观测的加总,第二个是合并数据集的观测数目。
比如下面根据 id 可以形成6个两两组合
来看id1和id2组合,根据x横向合并之后有数据集有4个观测,而合并之前两个数据集有7个观测。这就是生成的两个变量。

最后,把这些横向合并数据集再纵向合并在一起


idx

1

2

1

1

1

3

2

2

2

1

2

4

2

3

3

2

3

5

3

1

3

3

4

2

4

1

4

3

4

4

4

6


最佳答案

jl60156 查看完整内容

data test1; set have(rename=(x=x_ id=id_)); do i=1 to nobs; set have point=i nobs=nobs; if id_ ne id then do; if x = x_ then do; newid=cats(put(min(id_,id),best.),',',put(max(id_,id),best.)); flg=1; output; end; else if x ne x_ then do; ...
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2015-5-9 20:06:05
data test1;
     set have(rename=(x=x_ id=id_));
     do i=1 to nobs;
           set have point=i nobs=nobs;
          if id_ ne id then do;
                if x = x_ then do;
                     newid=cats(put(min(id_,id),best.),',',put(max(id_,id),best.));
                     flg=1;
                     output;
                end;
                else if x ne x_ then do;
                     newid=cats(put(min(id_,id),best.),',',put(max(id_,id),best.));
                     flg=2;
                output;
                end;
           end;
     end;
run;
proc sort data=test1 out=test2(keep=newid x_  flg);
     by newid x_  flg;
run;
data test3;
     set test2;
     by newid x_  flg;
     if first.x_;
run;
proc sql;
     create table want as
           select  tranwrd(newid,',',ifc(flg=1,'and','not',' ')) as id, x_ as x, case
                                when flg=1 then cats(put(sum(flg=1),best.),'/',put(count(newid),best.))
                                when flg=2 then cats(put(sum(flg=2),best.),'/',put(count(newid),best.))
                                end as over
           from test3
           group by newid
                order by newid, x_;
quit;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-5-13 14:49:55
有点不明白楼主的意思。
“先要对ID做一个组合1 ~ 4做出6种组合” : 这个条件就是说(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)也就是自己和自己不能组合。
“来看id1和id2组合,根据x横向合并之后有数据集有4个观测,而合并之前两个数据集有7个观测。这就是生成的两个变量” 这句话是什么意思?实在搞不清楚楼主的需求。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-5-13 15:23:16
关于id1和id2形成的数据集   可以是这样

id        x        over
1and2        1        0.75
1and2        2        0.75
1and2        3        0.75
2not1        4        0.75
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-5-13 15:25:01
sniperhgy 发表于 2015-5-13 14:49
有点不明白楼主的意思。
“先要对ID做一个组合1 ~ 4做出6种组合” : 这个条件就是说(1,2),(1,3),(1,4),(2 ...
关于id1和id2形成的数据集   可以是这样

id        x        over
1and2        1        0.75
1and2        2        0.75
1and2        3        0.75
2not1        4        0.75
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-5-13 22:29:35
小鳄鱼a 发表于 2015-5-13 15:25
关于id1和id2形成的数据集   可以是这样

id        x        over
真不好意思,我的理解力太差劲了……,即使楼主写了补充说明,我还是没看懂……
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群