楼主: akalius
1256 5

[程序分享] 请教个组合的问题 [推广有奖]

  • 10关注
  • 3粉丝

讲师

48%

还不是VIP/贵宾

-

威望
0
论坛币
4168 个
通用积分
9.1543
学术水平
4 点
热心指数
6 点
信用等级
6 点
经验
7832 点
帖子
261
精华
0
在线时间
605 小时
注册时间
2009-7-22
最后登录
2024-4-9

600论坛币
请教个问题  原始数据

dateclassname

1998/3/1

a小明

1998/3/1

a小红

1998/3/1

a小美

1998/3/1

b大壮

1998/3/1

b大高

1998/3/12

d小明

1998/3/12

d小溪

1998/3/12

d小何

1998/3/12

d付好


想得到的

dateclassnameanameb

1998/3/1

a小明小红

1998/3/1

a小明小美

1998/3/1

a小红小美

1998/3/1

b大壮大高

1998/3/12

d小明小溪

1998/3/12

d小明小何

1998/3/12

d小明付好

1998/3/12

d小溪小何

1998/3/12

d小溪付好

1998/3/12

d小何付好




即根据date  class  确定一个群体,求出两两的所有组合, 但namea  和  nameb 之间次序无所谓的




关键词:name date 原始数据 mean ATE
沙发
Strive、 发表于 2018-2-5 15:42:46 |只看作者 |坛友微信交流群
  1. data temp;
  2.         input date yymmdd10. class $ name $;
  3.         format date yymmdd10.;
  4.         cards;
  5. 1998/3/1        a        小明
  6. 1998/3/1        a        小红
  7. 1998/3/1        a        小美
  8. 1998/3/1        b        大壮
  9. 1998/3/1        b        大高
  10. 1998/3/12        d        小明
  11. 1998/3/12        d        小溪
  12. 1998/3/12        d        小何
  13. 1998/3/12        d        付好
  14. ;
  15. run;

  16. proc sql;
  17.         create table temp1 as
  18.                 select a.date,a.class,a.name as aname,b.name as bname
  19.                         from temp as a,temp as b
  20.         where a.date = b.date & a.class = b.class & a.name ^= b.name;
  21. quit;

  22. data temp2;
  23.         set temp1;
  24.         if aname <= bname then comname = compress(aname)||","||compress(bname);
  25.         else comname = compress(bname)||","||compress(aname);
  26. run;

  27. proc sql;
  28.         create table temp3 as
  29.                 select distinct date,class,comname from temp2;
  30. quit;

  31. data final;
  32.         set temp3;
  33.         aname = scan(comname,1);
  34.         bname = scan(comname,2);
  35.         drop comname;
  36. run;
复制代码
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
admin_kefu + 30 + 2 + 2 + 2 热心帮助其他会员

总评分: 论坛币 + 30  学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

使用道具

藤椅
akalius 学生认证  发表于 2018-2-5 19:25:20 |只看作者 |坛友微信交流群
Strive、 发表于 2018-2-5 15:42
谢谢   这个汉字比较大小是根据什么  if aname <= bname

使用道具

板凳
l1i2n3i4n5g 在职认证  发表于 2018-2-5 20:13:54 |只看作者 |坛友微信交流群
  1. data test;
  2.    input date :yymmdd10. class $ name $;
  3.    format date yymmdd10.;
  4. cards;
  5. 1998/3/1 a 小明
  6. 1998/3/1 a 小红
  7. 1998/3/1 a 小美
  8. 1998/3/1 b 大壮
  9. 1998/3/1 b 大高
  10. 1998/3/12 d 小明
  11. 1998/3/12 d 小溪
  12. 1998/3/12 d 小何
  13. 1998/3/12 d 付好
  14. ;
  15. run;

  16. data want;
  17. do i=1 to n;
  18.    set test(rename=(name=namea)) nobs=n point=i;
  19.    do j=1 to n;
  20.       p=i+j;
  21.       set test(rename=(name=nameb date=temp_date class=temp_class)) point=p;
  22.       if date=temp_date and class=temp_class and p<=n then output;
  23.    end;
  24. end;
  25. stop;
  26. drop temp_: j;
  27. run;
复制代码
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
admin_kefu + 20 热心帮助其他会员
akalius + 5 + 3 + 3 + 3 精彩帖子

总评分: 论坛币 + 25  学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

使用道具

报纸
Strive、 发表于 2018-2-5 21:38:06 |只看作者 |坛友微信交流群
akalius 发表于 2018-2-5 19:25
谢谢   这个汉字比较大小是根据什么  if aname
也是用ASCII码比较的
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
akalius + 5 + 3 + 3 + 3 精彩帖子

总评分: 论坛币 + 5  学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

使用道具

地板
xiami2000 在职认证  发表于 2018-2-6 00:59:43 |只看作者 |坛友微信交流群
Another option with only PROC SQL. Hope this short code helps
  1. proc sql;
  2.         create table temp1 as select distinct date, class,name
  3.         from test;
  4.         create table want as select a.date, a.class, a.name as namea , b.name as nameb
  5.         from temp1 as a,
  6.         temp1 as b
  7.         where a.date=b.date and a.class=b.class and a.name<b.name
  8.         order by a.date, a.class, a.name;
  9. quit;
复制代码
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
akalius + 5 + 3 + 3 + 3 精彩帖子
admin_kefu + 10 热心帮助其他会员

总评分: 论坛币 + 15  学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-19 16:12