全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1749 3
2013-03-21
我现在整理了一张表,表里有几个公共列,这些列每张表都要,剩下的有300列,分别标为a1-a100 b1-b100 t1-t100 我需要每张表都取这里面的3张表 各一个,即a1,b1,t1 以此类推,然后这100张表 还要set到一起去,那位大神能够写一个 能够达到此效果的代码,如果不能用循环的话,就只能一张一张的分割了。
二维码

扫码加我 拉你入群

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

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

全部回复
2013-3-21 22:51:06
假设你说的dataset叫做large,里面的变量为common(公共变量),a1-a100 b1-b100 c1-c100
%macro combine(dset=);
%do i=1 %to 100;
data d&i;
set large(keep=common a&i b&i c&i);
rename a&i=a b&i=b c&i=c;
run;%end;
%mend combine;
%combine(dset=large)
data all;
set d1-d100;
run;
二维码

扫码加我 拉你入群

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

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

2013-3-22 00:01:35
把楼上的code改了一点。 把结果的计算放到了宏里面。

%macro combine(dset=);
%do i=1 %to 100;
    data d&i;
       set &dset (keep=id date name a&i b&i t&i);
       rename a&i=a b&i=b t&i=t;
    run;
        if  &i = 1 then do;
                 data results;
                     set d&1;
                     run;
                 end;
        else do;
            data results;
            set results d&i;
            run;
        end;
%end;
%mend combine;
%combine(dset=test)

这里是模拟的数据.
data test;
array a{100};  
array b{100};
array t{100};
format date yymmdd10.;
   DO i = 1 to 5;
      Id = i;
          Date = today() +i;
          name = collate(64+i, 66+i);
           do j = 1 to dim(a);
              a(j) = i+j+1;
                  b(j) = i+j+2;
                  t(j) =  i+j+3;
                  end;
          output;
        end;
        drop i j;
run;
二维码

扫码加我 拉你入群

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

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

2013-3-22 09:48:24
非常感谢楼上两位大神,我马上去试试
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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