在SAS中添加单条记录?

时间:2015-06-09 13:32:27

标签: sas

我已经找到了如何将表附加到具有proc附加的基础。我想知道是否有更简单的方法(不需要创建临时保留表)添加单个记录?我找到的所有解决方案都需要几行,我想知道是否有更直接的东西,例如"删除"我失踪的命令?

3 个答案:

答案 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