楼主: l6397
2314 11

[问答] 怎样循环比较、删除、保存? [推广有奖]

11
yongyitian 发表于 2013-4-24 11:14:13
/* Try this one */
/* the dataset bc1 to bcn are appended together to BC */

data ys;            /* sample dataset */
    array a{15} a1-a15;
do N = 1 to 2000;
  do j = 1 to dim(a);
  a(j) = abs(int(normal(123+j+n)*100));
  end; output;
  end; drop j;
run;

%macro mymacro(dsn=, dout1=, dout2=);
data &dout1(keep=n a1-a15)  &dout2 (keep=n a1-a15);
array a{15} a1-a15;
array b{15} b1-b15;
retain b1-b15;
    if _n_ = 1 then do;
                     set &dsn(firstobs=1 obs=1);  
                     output &dout2;
                     do i = 1 to dim(a);
                     b(i) = a(i); end; end;
      set &dsn;
      if _n_^=1 then do;
               c = 0;
           do i1 = 1 to 15;
             do i2 = 1 to 15;
               if a(i1) - b(i2) = 0 then do;
                        c+1;            end;  
             end;
          end;
             if  c = 0 then output &dout1;
      end;
      drop i;
run;
%mend mymacro;

%macro mymacro2;
      %let dsn=ys; %let n1=1;    %let nobs=1;
%do %while(&nobs>0);
          %let dsn1=ys&n1;       %let dsn2=bc&n1;

   data _null_;
            dsn = "&dsn";
           dsn1 = "&dsn1";
           dsn2 = "&dsn2";
      call execute('%mymacro(dsn='||dsn||', dout1='||dsn1||', dout2='||dsn2||');');
   run;
      %let dsn=&dsn1;
      %let n1 = %eval(&n1+1);  
    proc sql noprint;
      select count(*) into :nobs
      from &dsn1;
    quit;

     proc append base=bc data=&dsn2;  run;
%end;
%mend mymacro2;

%mymacro2;

/* or use the %mymacro3 */
%macro mymacro3;
      %let dsn=ys;
      %let n1=1;   
      %let nobs=1;
  %do %while(&nobs>0);
      %let dsn1=ys&n1;      
      %let dsn2=bc&n1;
    %mymacro(dsn=&dsn, dout1=&dsn1, dout2=&dsn2);
      %let dsn=&dsn1;
      %let n1 = %eval(&n1+1);  
            proc sql noprint;
            select count(*) into :nobs
            from &dsn1;
            quit;
       proc append base=bc data=&dsn2;  run;
%end;
%mend mymacro3;
%mymacro3;

12
l6397 发表于 2013-4-24 21:48:52
谢谢高人指教!!
按您的方法问题解决。

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 12:48