我的数据看起来像
data have;
input genre1 genre2 genre3 genre4 year type$;
datalines;
1 1 1 1 1990 Y
2 2 2 2 1992 N
3 3 3 3 1998 Y
4 4 4 4 1999 Y
;
run;
我通过此代码创建了四个数据集
data G1 G2 G3 G4 ;
set have;
genre = genre1; if genre1 then output G1;
genre = genre2; if genre2 then output G2;
genre = genre3; if genre3 then output G3;
genre = genre4; if genre4 then output G4;
run;
并创建新数据集
data new;
set G1-G4;
run;
但实际上我有很多类型...这段代码太难了。是否有一些方便的方法来创建多数据集?
谢谢!
答案 0 :(得分:0)
假设目标是创建一个新数据集,其中包含year
和type
的每个genre
的重复项。这样的新数据集会要删除原始genre1-genre4
。
问题中的代码似乎很难,因为您不熟悉某些SAS概念。
以下是两种方式:
使用DATA
步骤和array
:
data want;
set have;
array genres genre1-genre4;
do _n_ = 1 to dim(genres);
genre = genres(_n_);
output;
end;
keep genre year type;
run;
proc sort data=want;
by genre year type;
run;
使用Proc TRANSPOSE
proc transpose data=have out=want(drop=_name_ rename=col1=genre);
by year type notsorted;
var genre1-genre4;
run;
proc sort data=want;
by genre year type;
run;
此新数据集是分类形式的数据,非常适合SAS,用于涉及BY
或CLASS
语句的其他DATA或PROC处理。分类变量为genre
。