前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SAS数据处理:set,merge,proc transpose和output[返璞归真003]

SAS数据处理:set,merge,proc transpose和output[返璞归真003]

作者头像
归海刀刀
发布2023-09-27 10:50:07
2970
发布2023-09-27 10:50:07
举报
文章被收录于专栏:归海刀刀
003

不是不会动心,而是不敢动心,在感情上也小心翼翼追求腔调,不愿将就,又拒绝遭遇情伤的可能,生怕姿态低入尘埃里,迷失自己。——《装腔启示录》

01

SAS是一款强大的数据分析软件,它提供了多种数据处理命令,可以帮助我们对数据进行合并,拆分,转置等操作。今天,我要给大家介绍一下SAS中的四个常用的数据处理命令:set,merge,proc transpose和output。这四个命令都非常实用和强大,可以让我们的数据分析更加高效和灵活。下面我就来分别介绍一下它们的语法和例子。

set命令

set命令是SAS中最基本的数据处理命令之一,它的作用是将一个或多个数据集合并成一个新的数据集。set命令的语法如下:

代码语言:javascript
复制
data newdata;
  set data1 data2 ...;
run;

其中,newdata是新生成的数据集的名字,data1 data2 ...是要合并的数据集的名字,可以有一个或多个。如果要合并的数据集有相同的变量名,那么新数据集中会保留最后一个数据集中的变量值。如果要合并的数据集有不同的变量名,那么新数据集中会包含所有的变量,并且缺失值会用.来表示。

例如,假设我们有两个数据集,一个是学生的基本信息,一个是学生的成绩信息,如下所示:

代码语言:javascript
复制
data student_info;
  input id name $ gender $ age;
  datalines;
  1 Alice F 20
  2 Bob M 21
  3 Cathy F 19
  4 David M 22
  ;
run;

data student_score;
  input id math english;
  datalines;
  1 90 85
  2 80 75
  3 95 90
  ;
run;

我们可以用set命令将这两个数据集合并成一个新的数据集student_all,如下:

代码语言:javascript
复制
data student_all;
  set student_info student_score;
run;

运行后,我们可以看到新的数据集student_all如下:

id

name

gender

age

math

english

1

Alice

F

20

90

85

2

Bob

M

21

80

75

3

Cathy

F

19

95

90

4

David

M

22

.

.

可以看到,新数据集中包含了两个原始数据集中的所有变量,并且按照原始数据集中的顺序进行了合并。由于student_score中没有David的成绩信息,所以新数据集中对应的math和english变量值为缺失值.。

merge命令

merge命令是SAS中另一个常用的数据处理命令,它的作用是将两个或多个按照某个或某些共同变量排序过的数据集进行匹配合并。merge命令的语法如下:

代码语言:javascript
复制
data newdata;
   merge data1 data2 ...;
   by var1 var2 ...;
run;

其中,newdata是新生成的数据集的名字,data1 data2 ...是要合并的数据集的名字,可以有两个或多个。by var1 var2 ...是指定要按照哪些共同变量进行匹配合并,可以有一个或多个。注意,在使用merge命令之前,必须先对要合并的数据集按照by变量进行排序。

例如,假设我们还是有上面那两个数据集student_info和student_score,我们想要按照id变量将它们匹配合并成一个新的数据集student_all2。首先,我们需要对这两个数据集按照id变量进行排序:

代码语言:javascript
复制
proc sort data=student_info; by id; run;
proc sort data=student_score; by id; run;

然后,我们可以用merge命令将它们匹配合并,如下:

代码语言:javascript
复制
data student_all2;
  merge student_info student_score;
  by id;
run;

运行后,我们可以看到新的数据集student_all2如下:

id

name

gender

age

math

english

1

Alice

F

20

90

85

2

Bob

M

21

80

75

3

Cathy

F

19

95

90

4

David

M

22

.

.

可以看到,新数据集中包含了两个原始数据集中的所有变量,并且按照id变量进行了匹配合并。由于student_score中没有David的成绩信息,所以新数据集中对应的math和english变量值为缺失值.。

proc transpose命令

proc transpose命令是SAS中用来进行数据转置的命令,它的作用是将一个数据集中的行变成列,或者将列变成行。proc transpose命令的语法如下:

代码语言:javascript
复制
proc transpose data=indata out=outdata;
   by var1 var2 ...;
   var var3 var4 ...;
   id var5;
run;

其中,indata是要转置的原始数据集的名字,outdata是转置后生成的新数据集的名字。by var1 var2 ...是指定要按照哪些变量进行分组转置,可以有一个或多个。var var3 var4 ...是指定要转置的变量,可以有一个或多个。id var5是指定要作为新数据集中变量名的变量,可以有一个或没有。

例如,假设我们有一个数据集student_score2,它包含了四个学生在三门课程上的成绩信息,如下所示:

代码语言:javascript
复制
data student_score2;
  input name $ math english physics;
  datalines;
  Alice 90 85 80
  Bob 80 75 70
  Cathy 95 90 85
  David 70 65 60
  ;
run;

我们想要将这个数据集转置成一个新的数据集student_score3,使得每一行表示一门课程,每一列表示一个学生,如下:

course

Alice

Bob

Cathy

David

math

90

80

95

70

english

85

75

90

65

physics

80

70

85

60

我们可以用proc transpose命令来实现这个转置,如下:

代码语言:javascript
复制
proc transpose data=student_score2 out=student_score3;
   var math english physics;
   id name;
run;

运行后,我们可以看到新的数据集student_score3如下:

NAME

Alice

Bob

Cathy

David

math

90

80

95

70

english. .

85

75

90

65

physics. .

80

70

85

60

可以看到,新数据集中每一行表示一门课程,每一列表示一个学生,并且用name变量作为新变量名。注意,新数据集中会自动生成一个_NAME_变量来表示原始数据集中的变量名。

output命令

output命令是SAS中用来输出数据集的命令,它的作用是将一个或多个数据集 output命令的语法如下:

代码语言:javascript
复制
data outdata1 outdata2 ...;
  set indata;
  if condition then output outdata1;
  else output outdata2;
run;

其中,outdata1 outdata2 ...是要输出的数据集的名字,可以有一个或多个。set indata是指定要输入的数据集的名字,只能有一个。if condition then output outdata1; else output outdata2;是指定要输出的条件和位置,可以有多个。

例如,假设我们还是有上面那个数据集student_all,我们想要将这个数据集按照性别分成两个新的数据集student_male和student_female。我们可以用output命令来实现这个分割,如下:

代码语言:javascript
复制
data student_male student_female;
  set student_all;
  if gender='M' then output student_male;
  else output student_female;
run;

运行后,我们可以看到新的数据集student_male如下:

id

name

gender

age

math

english

2

Bob

M

21

80

75

4

David

M

22

.

.

新的数据集student_female如下:

id

name

gender

age

math

english

1

Alice

F

20

90

85

3

Cathy

F

19

95

90

可以看到,新数据集中按照性别进行了分割,并且保留了原始数据集中的所有变量。以上就是我对SAS中set,merge,proc transpose和output命令的介绍,希望对大家有所帮助。如果你觉得这篇文章有用,请点赞和分享给你的朋友吧!谢谢!

尊敬的读者,首先感谢您对本篇文章的关注和阅读。在此,本小编想要说明的是,以上所述内容都是经过笔者认真整理和撰写的,但限于个人能力和知识水平等因素,难免存在疏漏或错误之处。如有不当之处,敬请包涵并指正,本小编将虚心接受您的批评与建议,并严谨修正文章。再次感谢您对本篇文章的支持与厚爱。

以上就是今天的内容了,喜欢的话麻烦点个关注,非常感谢!!!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-09-03 11:11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 归海刀刀 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档