SAS通过数组或一些简单的方法创建多个数据集

时间:2018-04-18 05:37:04

标签: sas

我的数据看起来像

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;

但实际上我有很多类型...这段代码太难了。是否有一些方便的方法来创建多数据集?

谢谢!

1 个答案:

答案 0 :(得分:0)

假设目标是创建一个新数据集,其中包含yeartype的每个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,用于涉及BYCLASS语句的其他DATA或PROC处理。分类变量为genre