个性化阅读
专注于IT技术分析

SAS连接多个数据集图解

在上一主题中, 我们学习了以不同的文件格式编写SAS数据集。现在, 在本主题中, 我们将学习如何使用SAS编程语言将多个数据集连接为单个数据集。

假设你在不同的数据集中有许多观测值, 并且需要在一个数据集中收集所有观测值, 然后你将做什么。为此, SAS可以帮助你将不同的数据集连接为一个数据集。

SET语句用于将不同的数据集连接为一个数据集。串联数据集存储原始数据集的所有观测值之和。串联数据集中的所有观察遵循这样的正确存储顺序, 首先是第一数据集的所有观察, 其次是第二数据集的所有观察, 依此类推。

理想情况下, 所有组合数据集应具有相同数量的变量, 但是如果它们具有不同数量的变量, 则所有变量都将出现在结果中, 而小型数据集的值将丢失。

句法:

SET data-set 1 data-set 2 data-set 3 data-set 4........;

其中

Set:这是一条语句, 用于将不同的数据集连接为一个数据集。

数据集1数据集2:这些是要串联的数据集的名称。

现在, 让我们通过一个示例来了解如何连接数据集:

让我们考虑一个组织的员工数据, 该数据有两个单独的数据集, 一个用于培训部门, 另一个用于非培训部门。为了获得所有员工的全部详细信息, 我们需要将两个数据集连接起来。为此, 我们使用SET语句。

DATA Training_Dept; 
   INPUT empid name $ salary; 
DATALINES; 
101 Avinash 20000 
103 Meera 25000 
106 Tushar 27000 
; 
RUN; 
DATA NON_Training_Dept; 
   INPUT empid name $ salary; 
DATALINES; 
102 Mitali 23000
104 Rohan 40000 
105 Akanksha 45000 
107 Prabhat 49000
108 Mohan 62000 
RUN; 
DATA All_Dept; 
   SET Training_Dept NON_Training_Dept; 
RUN; 
PROC PRINT DATA = All_Dept; 
RUN;

现在, 在SAS studio中执行以上代码:

连接多个数据集

输出

连接多个数据集

从输出中可以看到, 两个数据集都连接在一个表中。

不同情况

在某些情况下, 数据集的变量有所不同。在这种类型的不同情况下, 级联数据集中的观测总数始终等于每个数据集中的观测总数。让我们看看数据集变量具有变化的不同情况。

1.当变量数量不同时

如果所有数据集的变量数都不相等, 那么数据集仍然会串联在一起, 但是多余变量的值会在小数据集中消失。让我们通过一个例子来理解。

例如:

有两个要连接的数据集。一个是training_department, 具有五个变量, 即Empid, 姓名, 薪水, 地址和课程, 另一个是non_training_department, 具有三个变量, 即empid, 名称和薪水。在输出中, 数据集non_training_department的address和course值将消失。

DATA Training_Dept; 
   INPUT empid name $ salary address$ course$; 
DATALINES; 
101 Avinash 20000 delhi msoffice
103 Meera 25000 bhopal internet
106 Tushar 27000 indore database 
; 
RUN; 
DATA NON_Training_Dept; 
   INPUT empid name $ salary; 
DATALINES; 
102 Mitali 23000
104 Rohan 40000 
105 Akanksha 45000 
107 Prabhat 49000
108 Mohan 62000 
RUN; 
DATA All_Dept; 
   SET Training_Dept NON_Training_Dept; 
RUN; 
PROC PRINT DATA = All_Dept; 
RUN;

现在, 在SAS studio中执行以上代码:

连接多个数据集

输出

连接多个数据集

从输出中可以看到, 数据集non_training_department缺少地址和路线的值。

2.当不同的变量名

当所有数据集包含相同数量的变量, 但名称不同时, 在这种情况下, 我们可以通过应用重命名语句来连接数据集。如果我们不使用Rename语句, 那么SAS仍将连接数据集, 但是对于不同的名称变量, 它将产生丢失的结果。我们可以将Rename语句与为连接而创建的数据集一起应用。让我们通过一个例子来理解。

例如:

在下面的示例中, 我们有两个数据集, 一个是Training_Dept, 另一个是Non_Training_Dept。这两个数据集都有一个引用相同值(即名称)的变量, 但在两个数据集中用不同的名称声明。在数据集Training_Dept中, 变量按名称声明, 而在数据集Non_Training_Dept中, 按名称声明。为了连接它们, 我们在连接的数据集All_Dept上应用RENAME语句。

DATA Training_Dept; 
   INPUT empid name $ salary; 
DATALINES; 
101 Avinash 20000
103 Meera 25000
106 Tushar 27000
; 
RUN; 
DATA NON_Training_Dept; 
   INPUT empid ename $ salary  ; 
DATALINES; 
102 Mitali 23000
104 Rohan 40000 
105 Akanksha 45000 
107 Prabhat 49000
108 Mohan 62000 
RUN;  
DATA All_Dept; 
   SET Training_Dept(RENAME =(name = Employee) ) NON_Training_Dept(RENAME =(ename = Employee) ); 
RUN; 
PROC PRINT DATA = All_Dept; 
RUN;

现在, 在SAS studio中执行以上代码:

连接多个数据集

输出

连接多个数据集

正如我们在输出中看到的那样, 雇员名称由变量Employee串联。

3.当变量的长度不同时

如果数据集中变量的长度不同, 则可以通过应用Length语句将它们连接起来。在连接数据集中应用Length语句时, 我们应该考虑使用更大的长度, 而不是使用较小的长度, 因为SAS会生成更长的容器, 可以轻松接受较小的长度值。

例如:

在下面的示例中, 变量名称在Training_Dept数据集中具有5的长度, 在Non_Training_Dept数据集中具有7的长度。串联时, 我们将长度设为8。

DATA Training_Dept; 
   INPUT empid 1-2 name $ 3-7 salary 8-14  ; 
DATALINES; 
1 Richa  632.3 
3 Micha  521.5 
6 Tusha 548.6 
; 
RUN;
DATA NON_Training_Dept; 
   INPUT  empid 1-2 name $ 3-9  salary 10-16 ; 
DATALINES; 
2 Dany    515.2 
4 Rian   629.1 
5 Gury   743.25
7 Pranab 532.8 
8 Rasmi  522.5 
RUN; 
DATA All_Dept; 
   LENGTH name $ 8   ;
   SET Training_Dept  NON_Training_Dept ; 
RUN; 
PROC PRINT DATA = All_Dept; 
RUN;

在SAS Studio中执行以上代码:

连接多个数据集

输出

连接多个数据集

正如我们在输出中看到的那样, 变量名由更高的字符长度(即8)连接起来


赞(0) 打赏
未经允许不得转载:srcmini » SAS连接多个数据集图解
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

微信扫一扫打赏