sas - Sas base:按最大表一对一读取或从下一行获取数据
问题描述
我是 sas 基地的新手,需要帮助。我有 2 个包含不同数据的表,我需要合并它。但是在步骤我需要下一行的数据。例如我需要什么:
ID Fdate Tdate NFdate NTdate
id1 date1 date1 date2 date2
id2 date2 date2 date3 date3
....
我通过2次合并做到了:
data result;
merge table1 table2 by ...;
merge table1(firstobs=2) table2(firstobs=2) by...;
run;
我预计有 10 行,但得到了 9 行,因为一对一的读取在最小表的最后一行停止(合并)。我怎样才能得到最后一行(按最大表进行一对一阅读)?
解决方案
大多数简单的数据步骤不会在步骤的底部停止,而是在读取输入结束时停止在中间。您获得 N-1 个观察值的原因是因为第二个输入的记录少了一条。所以你需要做点什么来阻止它。
一种简单的方法是在处理第一个读取的最后一次观察时不执行第二次读取。您可以使用 END= 选项创建一个布尔变量,让您知道何时发生这种情况。
这是使用 SASHELP.CLASS 的简单示例。
data test;
set sashelp.class end=eof;
if not eof then set sashelp.class(firstobs=2 keep=name rename=(name=next_name));
else call missing(next_name);
run;
结果:
next_
Obs Name Sex Age Height Weight name
1 Alfred M 14 69.0 112.5 Alice
2 Alice F 13 56.5 84.0 Barbara
3 Barbara F 13 65.3 98.0 Carol
4 Carol F 14 62.8 102.5 Henry
5 Henry M 14 63.5 102.5 James
6 James M 12 57.3 83.0 Jane
7 Jane F 12 59.8 84.5 Janet
8 Janet F 15 62.5 112.5 Jeffrey
9 Jeffrey M 13 62.5 84.0 John
10 John M 12 59.0 99.5 Joyce
11 Joyce F 11 51.3 50.5 Judy
12 Judy F 14 64.3 90.0 Louise
13 Louise F 12 56.3 77.0 Mary
14 Mary F 15 66.5 112.0 Philip
15 Philip M 16 72.0 150.0 Robert
16 Robert M 12 64.8 128.0 Ronald
17 Ronald M 15 67.0 133.0 Thomas
18 Thomas M 11 57.5 85.0 William
19 William M 15 66.5 112.0
推荐阅读
- android - bitMapToFile ERR:java.io.FileNotFoundException:/storage/emulated/0/image.jpg:打开失败:Android中的EPERM(不允许操作)
- typeerror - TypeError: get_updates() 接受 3 个位置参数,但给出了 4 个
- c# - c# windows窗体,当我以管理员身份运行时,我无法获取当前用户名
- google-sheets-formula - 使用 importxml 从 Steam 配置文件中获取值
- python - 如何在列表中的每个元素之后插入新行?Python
- java - WebDriverWait depreciated 不再适用于隐式等待
- sql-server - 访问列表框查询阻止 SQL Server 更新查询
- spring-boot - 将 Spring JPA 存储库专门用于测试
- node.js - 为什么测试脚本一直无法完成测试脚本执行?JEST nodejs 测试超时错误
- postgresql - 如何从 docker 中删除所有 postgresql 数据,包括创建的用户和数据库?