课程表

SAS 基础

SAS 数据集操作

SAS 数据展示

SAS 基本统计程序

工具箱
速查手册

SAS合并数据集

当前位置:免费教程 » 大数据/云 » SAS

可以基于特定的公共变量合并多个SAS数据集以给出单个数据集。 这是使用MERGE语句和BY语句完成的。 合并数据集中的观察的总数通常小于原始数据集中的观察的数量的总和。 这是因为当公共变量的值存在匹配时,变量形成两个数据集合被合并为一个记录。

下面给出了合并数据集的两个先决条件:

  • 输入数据集必须至少有一个要合并的公用变量。
  • 输入数据集必须按照将用于合并的公共变量排序。

语法

SAS中的MERGE和BY语句的基本语法是:

  1. MERGE Data-Set 1 Data-Set 2
  2. BY Common Variable

以下是所使用的参数的说明:

  • Data-set1Data-set2是一个接一个写入的数据集名称。
  • 公共变量是基于其匹配值的数据集合将被合并的变量。

数据合并的例子

考虑两个SAS数据集,一个包含具有名称和工资的雇员ID,另一个包含具有雇员ID和部门的雇员ID。 在这种情况下,为了获得每个员工的完整信息,我们可以合并这两个数据集。 最终数据集仍将对每个员工有一个观察值,但它将包含薪水和部门变量。

  1. # Data set 1
  2. ID NAME SALARY
  3. 1 Rick 623.3
  4. 2 Dan 515.2
  5. 3 Mike 611.5
  6. 4 Ryan 729.1
  7. 5 Gary 843.25
  8. 6 Tusar 578.6
  9. 7 Pranab 632.8
  10. 8 Rasmi 722.5
  11.  
  12. # Data set 2
  13. ID DEPT
  14. 1 IT
  15. 2 OPS
  16. 3 IT
  17. 4 HR
  18. 5 FIN
  19. 6 IT
  20. 7 OPS
  21. 8 FIN
  22.  
  23. # Merged data set
  24. ID NAME SALARY DEPT
  25. 1 Rick 623.3 IT
  26. 2 Dan 515.2 OPS
  27. 3 Mike 611.5 IT
  28. 4 Ryan 729.1 HR
  29. 5 Gary 843.25 FIN
  30. 6 Tusar 578.6 IT
  31. 7 Pranab 632.8 OPS
  32. 8 Rasmi 722.5 FIN

上述结果通过使用以下代码实现,其中在BY语句中使用公共变量(ID)。 请注意,两个数据集中的观测值已在ID列中排序。

  1. DATA SALARY;
  2. INPUT empid name $ salary ;
  3. DATALINES;
  4. 1 Rick 623.3
  5. 2 Dan 515.2
  6. 3 Mike 611.5
  7. 4 Ryan 729.1
  8. 5 Gary 843.25
  9. 6 Tusar 578.6
  10. 7 Pranab 632.8
  11. 8 Rasmi 722.5
  12. ;
  13. RUN;
  14. DATA DEPT;
  15. INPUT empid dEPT $ ;
  16. DATALINES;
  17. 1 IT
  18. 2 OPS
  19. 3 IT
  20. 4 HR
  21. 5 FIN
  22. 6 IT
  23. 7 OPS
  24. 8 FIN
  25. ;
  26. RUN;
  27. DATA All_details;
  28. MERGE SALARY DEPT;
  29. BY (empid);
  30. RUN;
  31. PROC PRINT DATA=All_details;
  32. RUN;

匹配列中缺少值

可能存在公共变量的一些值在数据集之间不匹配的情况。 在这种情况下,数据集仍然会合并,但在结果中给出缺失值。

考虑数据集工资中缺少员工ID:3的情况,以及员工ID:6缺少表单数据集DEPT。 当应用上述代码时,得到以下结果。

  1. ID NAME SALARY DEPT
  2. 1 Rick 623.3 IT
  3. 2 Dan 515.2 OPS
  4. 3 . . IT
  5. 4 Ryan 729.1 HR
  6. 5 Gary 843.25 FIN
  7. 6 Tusar 578.6 .
  8. 7 Pranab 632.8 OPS
  9. 8 Rasmi 722.5 FIN

仅合并匹配项

为了避免结果中的缺失值,我们可以考虑仅保留具有公共变量的匹配值的观察值。 这是通过使用IN语句实现的。 SAS程序的merge语句需要更改。

在下面的示例中,IN =值仅保留来自数据集SALARY和DEPT的值匹配的观察值。

  1. DATA All_details;
  2. MERGE SALARY(IN=a) DEPT(IN=b);
  3. BY (empid);
  4. IF a=1 and b=1;
  5. RUN;
  6. PROC PRINT DATA=All_details;
  7. RUN;

在执行具有上述改变的部分的SAS程序时,我们得到以下输出。

  1. 1 Rick 623.3 IT
  2. 2 Dan 515.2 OPS
  3. 4 Ryan 729.1 HR
  4. 5 Gary 843.25 FIN
  5. 7 Pranab 632.8 OPS
  6. 8 Rasmi 722.5 FIN
转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号