我已经找到了如何将表附加到具有proc附加的基础。我想知道是否有更简单的方法(不需要创建临时保留表)添加单个记录?我找到的所有解决方案都需要几行,我想知道是否有更直接的东西,例如"删除"我失踪的命令?
答案 0 :(得分:2)
我认为你已经找到了,有多种选择。如果你想要添加的值,那么阅读代码的非专业人士最有意义的是PROC SQL INSERT
语句。
data test;
format a best. b $8. c date9.;
a = 1;
b = "ABC";
c = "01JAN2015"d;
run;
proc sql;
insert into test (b,c,a)
values ("DEF", "01JAN2014"d, 2);
quit;
变量订单(b,c,a)
的规范是可选的。如果未指定,则值必须与表中的列的顺序相同。
答案 1 :(得分:2)
您可以使用带有modify
语句的数据步骤来插入其他行。任何其他类型的数据步骤都涉及创建临时文件并替换原始文件,这在您对大型数据集进行少量更改时是不受欢迎的。
data class;
set sashelp.class;
run;
data class;
modify class;
Name = 'ZZZ';
output;
stop;
run;
这会将数据集的第一行读入PDV,然后使用更新的Name
值附加它,将所有其他变量的值保留为第一行中的值。
N.B。没有stop
语句,这将导致无限循环,因为SAS将无限期地交替添加和追加记录,从不接近数据集的末尾。
答案 2 :(得分:0)
如果您想有条件地添加来自其他数据集的观察结果,那么您可以使用output
告诉SAS按原样输出PDV:
生成示例输入数据集:
data source1 ;
do i=1 to 10 ;
output ;
end ;
run;
data source2 ;
i=999 ;
do j=100 to 0 by -10 ;
output ;
end ;
run ;
要添加到单个记录中的代码:
读入source1
并在测试条件(i=5
)之前输出观察结果,以便从source2
读取观察结果:
data want ;
set source1 ;
output ;
if i=5 then do ;
set source2 ;
output ;
end ;
run;
但是,了解两个set
语句之间的相互作用非常重要:
BOTH数据集中的任何变量都将被set
语句覆盖 - 因此即使先前的值尚未输出,此变量的值也会更新(参见第6项的观察数据) want
数据集)
只有一个数据集中的任何变量才会在观察中有效“保留”,直到遇到相应源数据集的另一个set
语句(参见want
的观察7到11)数据集)
有关PDV处理逻辑的详细信息,请参阅here