以下面这个数据集为例,把不同的class分开,可以参照下面的方法
data have;
input height weight class $ gender $ id;
cards;
156 51 Amber M 1
156 52 Amber M 2
156 52 Amber F 3
167 54 Denise F 4
167 55 Denise M 5
145 56 Ginny M 6
145 57 Ginny F 7
145 58 Ginny F 8
134 59 Lynn M 9
134 60 Lynn F 10
134 61 Lynn M 11
178 62 Rick F 12
178 63 Rick M 13
178 64 Rick F 14
156 51 Amber M 1
156 52 Amber M 2
156 52 Amber F 3
167 54 Denise F 4
167 55 Denise M 5
145 56 Ginny M 6
145 57 Ginny F 7
145 58 Ginny F 8
134 59 Lynn M 9
134 60 Lynn F 10
134 61 Lynn M 11
178 62 Rick F 12
178 63 Rick M 13
178 64 Rick F 14
156 51 Amber M 1
156 52 Amber M 2
156 52 Amber F 3
167 54 Denise F 4
167 55 Denise M 5
145 56 Ginny M 6
145 57 Ginny F 7
145 58 Ginny F 8
134 59 Lynn M 9
134 60 Lynn F 10
134 61 Lynn M 11
178 62 Rick F 12
178 63 Rick M 13
178 64 Rick F 14
156 51 Amber M 1
156 52 Amber M 2
156 52 Amber F 3
167 54 Denise F 4
167 55 Denise M 5
145 56 Ginny M 6
145 57 Ginny F 7
145 58 Ginny F 8
134 59 Lynn M 9
134 60 Lynn F 10
134 61 Lynn M 11
178 62 Rick F 12
178 63 Rick M 13
178 64 Rick F 14
156 51 Amber M 1
156 52 Amber M 2
156 52 Amber F 3
167 54 Denise F 4
167 55 Denise M 5
145 56 Ginny M 6
145 57 Ginny F 7
145 58 Ginny F 8
134 59 Lynn M 9
134 60 Lynn F 10
134 61 Lynn M 11
178 62 Rick F 12
178 63 Rick M 13
178 64 Rick F 14
;
run;
*方法一;
proc sql noprint;
select count(distinct class) into:count from have;
select distinct class into :a separated by ',' from have;
quit;
%macro kk;
%do i=1 %to &count;
data data_&i;
a=scan("&a",&i);
set have;
if class=a;
drop a;run;
%end;
%mend;
%kk
*方法二;
proc sql noprint;
create table want as
select distinct class from have;
quit;
data _null_;
set want;
call execute('data data_'||strip(class)||';');
call execute('set have;if class="'||strip(class)||'";run;');
run;
|