全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2629 8
2010-03-08
假设有4个不同的位置(P1,P2,P3, P4),每个位置都可以放红,黄, 绿 3 种颜色的球。
这样总共可以有 3 X 3 X 3 X 3 = 81 种不同的放法。

现在我想和各位SAS专版的会员讨论一下如何把这81种不同的放法都列出来。

我的方法如下:
第一步:建一个数列 (1,2,3,4,5,6,7,8,9,10,11,12)
第二步:用 MACRO  %permute(4, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) ,将从12个不同的数里任意选4个数的所有不同排列都列出来。
             (There are 4 variables: r1, r2, r3, r4 in SAS dataset output)
http://support.sas.com/techsup/technote/ts498.html
第三步 :在所有的排列中,将(1, 2, 3, 4)       替换成 ("R")
                                              将(5, 6, 7, 8)       替换成 ("Y")
                                              将(9, 10, 11, 12) 替换成 ("G")
第四步:合并 r1, r2, r3, r4 (TRIM(r1) || TRIM(r2) || TRIM(r3) || TRIM(r4))成为一个新的variable: RYG.
第五步:删除所有重复的情况(select distinct RYG),最后得到81种不同的放法。

请各位SAS专版的会员分享一下你们的方法。谢谢!



二维码

扫码加我 拉你入群

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

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

全部回复
2010-3-8 02:07:48
jackbt123 发表于 2010-3-8 00:45
假设有4个不同的位置(P1,P2,P3, P4),每个位置都可以放红,黄, 绿 3 种颜色的球。
这样总共可以有 3 X 3 X 3 X 3 = 81 种不同的放法。

现在我想和各位SAS专版的会员讨论一下如何把这81种不同的放法都列出来。

我的方法如下:
第一步:建一个数列 (1,2,3,4,5,6,7,8,9,10,11,12)
第二步:用 MACRO  %permute(4, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) ,将从12个不同的数里任意选4个数的所有不同排列都列出来。
             (There are 4 variables: r1, r2, r3, r4 in SAS dataset output)
http://support.sas.com/techsup/technote/ts498.html
第三步 :在所有的排列中,将(1, 2, 3, 4)       替换成 ("R")
                                              将(5, 6, 7, 8)       替换成 ("Y")
                                              将(9, 10, 11, 12) 替换成 ("G")
第四步:合并 r1, r2, r3, r4 (TRIM(r1) || TRIM(r2) || TRIM(r3) || TRIM(r4))成为一个新的variable: RYG.
第五步:删除所有重复的情况(select distinct RYG),最后得到81种不同的放法。

请各位SAS专版的会员分享一下你们的方法。谢谢!
Here is a simple one.

data needed;
   array p[4]  $1 p1-p4;
   array b[3]  $1 ('R','Y','G');
   length  comb $4;
   do i1 = 1 to 3;
      do i2 = 1 to 3;
         do i3 = 1 to 3;
             do i4 = 1 to 3;
               comb=catt( b(i1), b(i2), b(i3), b(i4) );
               output;
             end;
         end;
      end;
    end;
   keep  comb;
run;

proc print; run;


二维码

扫码加我 拉你入群

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

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

2010-3-8 02:57:46
hi bobguy,  thank you so much.
could you share your sas programming for combinations and permutations?
best,
二维码

扫码加我 拉你入群

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

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

2010-3-8 05:40:19
假设有R个位置

%MACRO GYR(R);

DATA GYR;
KEEP V1 - V&R;
ARRAY ColorList{3} $ 1 ("G", "Y", "R");

%DO S = 1 %TO &R;                 
DO i&S = 1 TO DIM(ColorList);
%END;
%DO S = 1 %TO &R;                 
V&S = ColorList{i&S};
%END;
OUTPUT;
%DO S = 1 %TO &R;                 
END;
%END;
RUN;

%MEND GYR;
二维码

扫码加我 拉你入群

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

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

2010-3-8 08:40:08
jackbt123 发表于 2010-3-8 05:40
假设有R个位置

%MACRO GYR(R);

DATA GYR;
KEEP V1 - V&R;
ARRAY ColorList{3} $ 1 ("G", "Y", "R");

%DO S = 1 %TO &R;                 
DO i&S = 1 TO DIM(ColorList);
%END;
%DO S = 1 %TO &R;                 
V&S = ColorList{i&S};
%END;
OUTPUT;
%DO S = 1 %TO &R;                 
END;
%END;
RUN;

%MEND GYR;
Your macro is good one. But I am not sure what is your question in the other message.
二维码

扫码加我 拉你入群

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

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

2010-3-8 09:39:18
M 个数里任意选 N 个数的所有排列(permutations).
假如你有时间的话,请你分享一下你的SAS codes.
谢谢。
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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