全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1365 1
2015-05-09
悬赏 50 个论坛币 已解决

跟   https://bbs.pinggu.org/thread-3704218-1-1.html   类似

数据两两合并后,但是新生成一个变量就可以了,这个变量的要求是,两个不同的id,针对其重合的x,求出y比较小的那个赋值给新生成的变量 比如id 1 和2 。重合的为x 123  此时  合并后  x对应的新变量取值为y比较小的。比如 x为1,在id 12 中,分别对应y是0.1 和0.5  那么新生成变量赋值为 0.1 其他类似。x没有重合的新生成变量为0


最后也是要生成一个纵向数据集





idxy

1

2

0.8

1

1

0.1

1

3

0.1

2

2

0.2

2

1

0.5

2

4

0.1

2

3

0.2

3

2

0.2

3

5

0.3

3

1

0.4

3

3

0.1

4

2

0.2

4

1

0.1

4

3

0.1

4

4

0.5

4

6

0.1


最佳答案

jl60156 查看完整内容

data test1; set have(rename=(x=x_ id=id_ y=y_)); 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.)); _y=min(y_,y); flg=1; output; end; else ...
二维码

扫码加我 拉你入群

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

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

全部回复
2015-5-9 20:18:45
data test1;
     set have(rename=(x=x_ id=id_ y=y_));
     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.));
                                                                                 _y=min(y_,y);
                     flg=1;
                     output;
                end;
                else if x ne x_ then do;
                     newid=cats(put(min(id_,id),best.),',',put(max(id_,id),best.));
                                                                                 _y=0;
                     flg=2;
                output;
                end;
           end;
     end;
run;
proc sort data=test1 out=test2(keep=newid x_  flg _y);
     by newid x_  flg;
run;
data want(drop=flg newid x_ _y);
     set test2;
     by newid x_  flg;
                 id=tranwrd(newid,',',ifc(flg=1,'and','not',' '));
                 x=x_;
                 newy=_y;
     if first.x_;
run;
二维码

扫码加我 拉你入群

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

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

栏目导航
热门文章
推荐文章

说点什么

分享

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