Sas base:按最大表一对一读取或从下一行获取数据
我是sas基地的新手,需要帮助。 我有两个不同的数据表,我需要合并它。 但在步骤中,我需要下一行的数据。 我需要的示例:Sas base:按最大表一对一读取或从下一行获取数据,sas,Sas,我是sas基地的新手,需要帮助。 我有两个不同的数据表,我需要合并它。 但在步骤中,我需要下一行的数据。 我需要的示例: ID Fdate Tdate NFdate NTdate id1 date1 date1 date2 date2 id2 date2 date2 date3 date3 .... 我做了两次合并: data result; merge table1 table2 by ...; merge table1(firstobs=2) table
ID Fdate Tdate NFdate NTdate
id1 date1 date1 date2 date2
id2 date2 date2 date3 date3
....
我做了两次合并:
data result;
merge table1 table2 by ...;
merge table1(firstobs=2) table2(firstobs=2) by...;
run;
我期望有10行,但得到了9行,因为一对一的读取在最小表(merge)的最后一行停止。如何得到最后一行(用最大表进行一对一读取)? 最简单的数据步骤不在步骤的底部,而是在读完输入结束时在中间。获得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
如果使用FIRSTOBS=2,我看不出通过某个变量进行合并将如何正常工作。这将跳过第一组的第一个观察。只有在只有一个分组的情况下,它才能正常工作,在这种情况下,为什么要进行合并?它不是完整的程序,我在第二次合并中使用keep和rename对列进行了重命名,所有这些都可以正常工作。当我们加入两个不同列的数据集时,我想我们会得到一对一的读数。所以我在寻找如何通过最大的表进行一对一的读取,并在最后一行将null设置为第二个数据集的列(merge firstobs=2)。可能只是在第二个数据集中添加生成的行,但我不知道
by
不应该是merge
语句的一部分,而是在第二个语句中,这样代码就不会运行。请共享更多代码,或者最好是日志。请向我们展示您的输入数据,并确保不要将两个不同的东西命名为相同的名称,因为我打赌Fdate下的date1与Tdate下的date1不相同。还显示第十行输出的外观