楼主: wslirunping
8631 14

[原创博文] 很大的SAS数据集怎样分成几个小数据集呢? [推广有奖]

11
李金玲 发表于 2011-1-19 20:57:27
I give you a macro, you can divide any data set into any small data set!:

data a;
a=1;
b=2;
c=3;
d=4;
run;

option mprint symbolgen mprint mlogic;

%macro separate_data(dataset=, x1= , x2=);

proc sql noprint;
select name into: patname separated by "/ "  from sashelp.vcolumn
where libname="WORK" and memname="&dataset.";
quit;

%put &patname.;

%do x =1 %to &x2;  
data dataset_&x.;
set &dataset;
keep
%do i = (&x-1)*%sysfunc(ceil(%EVAL(&x1/&x2)))+1 %to &x.*%sysfunc(ceil(%EVAL(&x1/&x2)));
%let temp= %scan(&patname.,&i.,"/");
%if &i <= &x1 %then %do;
   &temp.
%end;
%end;
;
run;
%end;
%mend separate_data;
%separate_data(dataset=a, x1=4 , x2=4);
李经纶

12
soporaeternus 发表于 2011-1-19 21:35:45
楼上程序用data option的keep=的话
一个data步,遍历一次全表

但是我不确定一个一个做和同时做多个哪个效率高点......
Let them be hard, but never unjust

13
derickastro 发表于 2012-8-29 15:36:28
data new1;
set a;
if _n_>2 and _n_<=5;
run;

14
情迷仲夏夜 发表于 2012-8-30 01:58:08
excel最大row是65536,当SAS数据观测row超过65536,那就需要将分成两个以上!方法有很多,可以根据SAS内的id来分别输出成两个或更多:
data d1 d2;
    set data;
    ...
    if id>65536 then output d2;else output d1;
run;
或是:
data d1(keep=v1-v256) d2(keep=v257-v512);
    set data;
    ...
run;

15
zhm456 发表于 2012-8-30 20:13:46
wslirunping 发表于 2010-3-12 13:54
高手们,出招啊!好像论坛上有好多这个问题,都没有解决啊
一个SAS数据集中有400-500个变量,而且变量名不 ...
你用if函数来就可以了

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-25 05:28