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

最佳答案

pobel 查看完整内容

%macro test(n); data test; %do i=1 %to &n; do v&i =1 to &n; %if &i=1 %then %do; tmp&i=cats("*",v&i,"*"); %end; %else %do; if index(tmp%eval(&i-1), cats("*",v&i,"*")) then continue; else tmp&i="*"||catx("*",of v1-v&i)||"*"; %end; %if &i=&n %then output;; %end; %do i=1 %to &n; end; %end; drop tmp:; ...
二维码

扫码加我 拉你入群

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

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

全部回复
2015-4-9 10:40:07
%macro test(n);
    data test;
            %do i=1 %to &n;
                    do v&i =1 to &n;
                    %if &i=1 %then %do;
                           tmp&i=cats("*",v&i,"*");
                        %end;
                        %else %do;
                            if index(tmp%eval(&i-1), cats("*",v&i,"*")) then continue;
                                else tmp&i="*"||catx("*",of v1-v&i)||"*";
                        %end;
                        %if &i=&n %then output;;
                 %end;
                 %do i=1 %to &n;
                end;
          %end;
                  drop tmp:;
        run;
%mend;

%test(4)
%test(6)
二维码

扫码加我 拉你入群

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

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

2015-4-9 20:00:28
复制代码
二维码

扫码加我 拉你入群

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

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

2015-4-10 03:12:42
%macro perm(r) / parmbuff;   
      %let i=2;               
      %let things=;                     
      %do %while (%scan(&syspbuff,&i) ne );     
        %let p&i="%scan(&syspbuff,&i)";         
        %if &i=2 %then %let things=&&p&i;   
        %else %let things=&things,&&p&i;        
        %let i=%eval(&i+1);
      %end;
      %let n=%eval(&i-2);
      data perm;
         drop i j copy;
         array check (*) $ 10 r1-r&r;        
          %do m=1 %to &r;                 
            do r&m = &things;
          %end;
          copy=0;
            do i=2 to &r;               
              do j=1 to i-1;            
                if check(j)=check(i) then copy+1;
              end;
            end;
          if copy = 0 then output;        
          if copy = 0 then put r1-r&r;      
          %do m=1 %to &r;
            end;                             
          %end;
        run;
   %mend perm;
%perm(5,1,2,3,4,5);
二维码

扫码加我 拉你入群

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

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

2015-4-10 10:41:55
yongyitian 发表于 2015-4-9 20:00
感谢您的回答!看了您的代码查了一下才知道了allperm这个功能的存在。
不知道有没有什么办法可以不依靠allperm这个功能来实现。
二维码

扫码加我 拉你入群

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

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

2015-4-10 10:47:50
jl60156 发表于 2015-4-10 03:12
%macro perm(r) / parmbuff;   
      %let i=2;               
      %let things=;                  ...
感谢您的回答!有些地方看的一知半解。
最大的问题在于呼出宏时只能给出一个数值而非给定一串数据。
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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