如何将新记录附加到SAS

时间:2017-05-10 17:09:17

标签: sas proc-sql

当我第一次运行代码时,我输出的文件夹中有一行的新数据集。然后我使用变量的新值并再次运行它,我的目的是将新记录作为我第一次创建的数据集中的第二行追加。

假设我有一个名为name的变量,用于多次更改其值,我还有一个名为tab1的表,用于每次存储新值{{ 1}}有新的价值。例如:在代码中:

name

第一次,如果PROC SQL; Create table tab1 AS select a.name, a. id from tab2 a ; quit; 变量为“Mark”,则name存储值Mark和2,然后我使用PROC EXPORT输出一行包含名称的新数据集:标记和标识:1。例如:

tab1

然后我读了这个table1.csv,然后再用它来联合tab1来获取一个新表PROC EXPORT data = tab1 outfile = "&somepath\table1.csv" replace; run; ,然后将它输出到文件夹中,例如:

tab3

问题是每次运行代码时,输​​出都会更新。例如,PROC IMPORT OUT=table1 datafile = "&somepath\table1.csv" replace; run; PROC SQL; create table tab3 as select * from table1 union select * from tab1; quit; PROC EXPORT data=tab3 outfile = "&somepath\table1.csv replace; run; 变量设置为“Tom”,然后name将变为“Tom和2,table1也是如此。我只是不能将新的变量附加到旧的。我应该如何修改我的这样做的代码?

1 个答案:

答案 0 :(得分:0)

您不需要使用PROC EXPORT来写分隔记录。只需使用正常的数据步骤。这样,您可以控制FILE语句中的选项并包含MOD选项,以便SAS将附加到现有文件。

 data _null_;
    set new_dataset;
    file 'existing.csv' dsd MOD ;
    put (_all_) (+0) ;
 run;

如果您希望CSV文件有标题行,您可以在第一时间使用PROC EXPORT,或者自己编写标题。

 proc transpose data=table1(obs=0) out=names ;
    var _all_;
 run;
 data _null_;
   file 'newfile.csv' dsd ;
   set names end=eof;
   put _name_ @;
   if eof then put;
 run;