请选择 进入手机版 | 继续访问电脑版
楼主: 冠凌
1918 9

[实际应用] SAS数据步实现非重复全排列 [推广有奖]

  • 1关注
  • 0粉丝

初中生

57%

还不是VIP/贵宾

-

威望
0
论坛币
3 个
通用积分
0
学术水平
1 点
热心指数
2 点
信用等级
1 点
经验
273 点
帖子
14
精华
0
在线时间
13 小时
注册时间
2011-5-18
最后登录
2020-10-25

冠凌 发表于 2017-8-21 10:19:09 |显示全部楼层 |坛友微信交流群

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
请问如何用SA将6!的全S数据步排列所有情况输出,例如:123456,213456,312456等一共720种情况。
二维码

扫码加我 拉你入群

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

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

关键词:如何用 SAS

回帖推荐

l1i2n3i4n5g 发表于2楼  查看完整内容

data test; do x=123456 to 654321; if findc(x,'1') and findc(x,'2') and findc(x,'3') and findc(x,'4') and findc(x,'5') and findc(x,'6') then output; end; run;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
eijuhz + 1 + 2 + 1 鼓励积极发帖讨论

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

l1i2n3i4n5g 在职认证  发表于 2017-8-21 16:40:19 |显示全部楼层 |坛友微信交流群
data test;
        do x=123456 to 654321;
                if         findc(x,'1') and
                        findc(x,'2') and
                        findc(x,'3') and
                        findc(x,'4') and
                        findc(x,'5') and
                        findc(x,'6')
                then output;
        end;
run;

使用道具

  1. data a1 (drop=i);
  2.         array a{6};
  3.         do i=1 to 6;
  4.                 a{i}=i;
  5.         end;
  6.         do i=1 to fact(6);
  7.                 call allperm(i, of a[*]);
  8.                 output;
  9.         end;
  10. run;
  11. proc print data=a1;run;
复制代码
已有 1 人评分论坛币 学术水平 收起 理由
l1i2n3i4n5g + 5 + 3 观点有启发

总评分: 论坛币 + 5  学术水平 + 3   查看全部评分

使用道具

l1i2n3i4n5g 发表于 2017-8-21 16:40
data test;
        do x=123456 to 654321;
                if         findc(x,'1') and
哥们儿你这办法粗暴简单好用啊…

使用道具

l1i2n3i4n5g 在职认证  发表于 2017-8-22 10:00:33 |显示全部楼层 |坛友微信交流群
大片阳光因你 发表于 2017-8-22 03:36
兄弟,还是你的方法最正宗,学习了!

使用道具

superguy333 发表于 2017-8-22 22:53:28 |显示全部楼层 |坛友微信交流群
l1i2n3i4n5g 发表于 2017-8-21 16:40
data test;
        do x=123456 to 654321;
                if         findc(x,'1') and
厉害,逻辑简单,容易理解。

使用道具

冠凌 发表于 2017-9-11 15:05:21 |显示全部楼层 |坛友微信交流群
l1i2n3i4n5g 发表于 2017-8-21 16:40
data test;
        do x=123456 to 654321;
                if         findc(x,'1') and
大道至简 学习了 我的方法比较直白了。。。
  1. data perm6c6;
  2.         do k1 = 1 to 6;
  3.                 do k2 = 1 to 6;
  4.                         do k3= 1 to 6;
  5.                                 do k4= 1 to 6;
  6.                                         do k5= 1 to 6;
  7.                                                 do k6= 1 to 6;
  8.                                                         perm=catx('',k1,k2,k3,k4,k5,k6);
  9.                                                         put perm=;

  10.                                                         if  k1+k2+k3+k4+k5+k6=21&k1*k2*K3*k4*k5*k6=720 then
  11.                                                                 output;
  12.                                                 end;
  13.                                         end;
  14.                                 end;
  15.                         end;
  16.                 end;
  17.         end;
  18. run;
复制代码

使用道具

冠凌 发表于 2017-9-11 15:08:49 |显示全部楼层 |坛友微信交流群
大片阳光因你 发表于 2017-8-22 03:36
老哥稳 用这个方法封包成宏 可以推而广之
  1. %macro pnn(n=);
  2. data perm(drop=i);
  3. array a{&n.};
  4. do i = 1 to &n.; a[i]=i; end;
  5. do i = 1 to fact(&n.);
  6.    call allperm(i, of a[*]);
  7.    output;
  8. end;
  9. run;
  10. %mend pnn;

  11. %pnn(n=6);
复制代码
另外不是很理解fact()的用法,可否指点一二。

使用道具

冠凌 发表于 2017-9-11 15:08
老哥稳 用这个方法封包成宏 可以推而广之另外不是很理解fact()的用法,可否指点一二。
fact(n)=n!

我懒得算6!是多少 所以写了fact(6) ...

使用道具

iwasguru 发表于 2017-9-12 17:21:56 |显示全部楼层 |坛友微信交流群
可以用 PROC PLAN实现。

%macro fact(n);
  %sysfunc(fact(&n))
%mend fact;

%let N = 6;
proc plan;
   factors subjects = %fact(&N) ordered  x = &N perm;
   output out = test;
run;

proc transpose data=test out = test2;
   by subjects;
run;

proc print data = test2;
run;



Obs    subjects    _NAME_    COL1    COL2    COL3    COL4    COL5    COL6

  1        1         x         1       2       3       4       5       6
  2        2         x         1       2       3       4       6       5
  3        3         x         1       2       3       5       4       6
  4        4         x         1       2       3       5       6       4
  5        5         x         1       2       3       6       4       5
  6        6         x         1       2       3       6       5       4
  7        7         x         1       2       4       3       5       6
  8        8         x         1       2       4       3       6       5
  9        9         x         1       2       4       5       3       6
10       10         x         1       2       4       5       6       3
11       11         x         1       2       4       6       3       5
12       12         x         1       2       4       6       5       3
13       13         x         1       2       5       3       4       6
14       14         x         1       2       5       3       6       4
15       15         x         1       2       5       4       3       6
16       16         x         1       2       5       4       6       3
17       17         x         1       2       5       6       3       4
18       18         x         1       2       5       6       4       3
19       19         x         1       2       6       3       4       5
20       20         x         1       2       6       3       5       4
21       21         x         1       2       6       4       3       5
22       22         x         1       2       6       4       5       3
23       23         x         1       2       6       5       3       4
24       24         x         1       2       6       5       4       3
25       25         x         1       3       2       4       5       6
26       26         x         1       3       2       4       6       5
27       27         x         1       3       2       5       4       6
28       28         x         1       3       2       5       6       4
29       29         x         1       3       2       6       4       5
30       30         x         1       3       2       6       5       4
31       31         x         1       3       4       2       5       6
32       32         x         1       3       4       2       6       5
33       33         x         1       3       4       5       2       6
34       34         x         1       3       4       5       6       2
35       35         x         1       3       4       6       2       5
36       36         x         1       3       4       6       5       2

...

使用道具

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

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

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

GMT+8, 2024-3-28 21:54