Merge 为什么“合并”会自动设置我创建的最新数据集?
我在使用Merge 为什么“合并”会自动设置我创建的最新数据集?,merge,sas,Merge,Sas,我在使用merge时遇到了问题,我意识到了原因:除了要合并的表之外,SAS似乎还自动添加了我创建的最新表。以下代码说明了该问题: DATA table1; /* to be merged dataset no 1*/ input X rep Y Z; cards; 1 1 0 2 5 1 2 6 5 2 5 2 ; run; proc sort; by x rep; run; data table3; /* to be merged dataset no 2 */ inp
merge
时遇到了问题,我意识到了原因:除了要合并的表之外,SAS似乎还自动添加了我创建的最新表。以下代码说明了该问题:
DATA table1; /* to be merged dataset no 1*/
input X rep Y Z;
cards;
1 1 0 2
5 1 2 6
5 2 5 2
;
run;
proc sort; by x rep; run;
data table3; /* to be merged dataset no 2 */
input X;
cards;
1
5
5
10
10
15
;
run;
proc sort; by x; run;
data table3; /* rep stands for 'replicate' and makes sure there is no uniqueness issue */
set table3; by x;
retain rep;
if first.x then rep=0;
rep=rep+1; /*rep+1; */
run;
data table2; /*some other table having nothing to do with the merge*/
input Y W;
cards;
1 0
1 0
2 0
3 0
3 0
8 0
;
run;
data merge1;
merge table3 table1;
by x rep;
set nobs=n;
run;
提交时,日志显示最新创建的表(表2)以某种方式用于创建merge1。实际上,表2列被添加到了merge1应该是什么
试图理解这一点,我发现如果我去掉set nobs=n,这种情况就不会发生行
我在互联网上找不到原因,但我发现了一些文档,警告说merge
可能很棘手(但出于其他原因)
因此,我的问题是:
- 为什么会发生这种情况以及如何解决?(我需要
nobs
在我的计算中)我可以在单独的数据步骤中进行合并和以下处理来避免问题,但我想了解整个事情以及如何正确处理它
merge
是否是仅在数据集的一列中添加值的最佳方法?(此处,表1第X列由表3更新,但Y和Z尚未更新)。(如果回答了第一个问题,此问题将是第二个问题)
语句正在
表2中从&SYSLAST
隐式读取set nobs=n
语句
就像做
data table2 ;
/* some stuff */
run ;
data want ;
set ; /* implicity use &SYSLAST - table2 in this case - as input dataset */
run ;
merge1的输出
X rep Y Z NOBS
1 1 0 2 6
5 1 2 6 6
5 2 5 2 6
10 1 6
10 2 6
15 1 6
X代表Y代表Z代表
1 1 0 2 6
5 1 2 6 6
5 2 5 2 6
10 1 6
10 2 6
15 1 6
set nobs=n
语句正在表2中隐式地从&SYSLAST
读取
就像做
data table2 ;
/* some stuff */
run ;
data want ;
set ; /* implicity use &SYSLAST - table2 in this case - as input dataset */
run ;
merge1的输出
X rep Y Z NOBS
1 1 0 2 6
5 1 2 6 6
5 2 5 2 6
10 1 6
10 2 6
15 1 6
X代表Y代表Z代表
1 1 0 2 6
5 1 2 6 6
5 2 5 2 6
10 1 6
10 2 6
15 1 6
set nobs=n
语句正在表2中隐式地从&SYSLAST
读取
就像做
data table2 ;
/* some stuff */
run ;
data want ;
set ; /* implicity use &SYSLAST - table2 in this case - as input dataset */
run ;
merge1的输出
X rep Y Z NOBS
1 1 0 2 6
5 1 2 6 6
5 2 5 2 6
10 1 6
10 2 6
15 1 6
X代表Y代表Z代表
1 1 0 2 6
5 1 2 6 6
5 2 5 2 6
10 1 6
10 2 6
15 1 6
set nobs=n
语句正在表2中隐式地从&SYSLAST
读取
就像做
data table2 ;
/* some stuff */
run ;
data want ;
set ; /* implicity use &SYSLAST - table2 in this case - as input dataset */
run ;
merge1的输出
X rep Y Z NOBS
1 1 0 2 6
5 1 2 6 6
5 2 5 2 6
10 1 6
10 2 6
15 1 6
X代表Y代表Z代表
1 1 0 2 6
5 1 2 6 6
5 2 5 2 6
10 1 6
10 2 6
15 1 6
谢谢你的回答!实际上,我希望n是merge1中的行数。我必须开始一个新的数据步骤才能得到它吗?它太完美了。谢谢!谢谢你的回答!实际上,我希望n是merge1中的行数。我必须开始一个新的数据步骤才能得到它吗?它太完美了。谢谢!谢谢你的回答!实际上,我希望n是merge1中的行数。我必须开始一个新的数据步骤才能得到它吗?它太完美了。谢谢!谢谢你的回答!实际上,我希望n是merge1中的行数。我必须开始一个新的数据步骤才能得到它吗?它太完美了。谢谢!