如何将新记录附加到 SAS 中的现有 CSV 文件

How to append the new records to the existing CSV file in SAS

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

假设我有一个名为name的变量,用于多次更改其值,我还有一个名为tab1的table,用于存储每次 name 都有新值时的新值。例如:代码中:

PROC SQL;
Create table tab1 AS
select a.name, a. id
from tab2 a ;
quit;

第一次,如果name变量是"Mark",那么tab1存储值Mark和2,然后我使用PROC EXPORT输出一行新数据集,其中包括name:Mark和id:1。例如:

PROC EXPORT data = tab1
outfile = "&somepath\table1.csv"
replace;
run;

然后我读了这个table1.csv,然后用它再次union tab1得到一个新的tabletab3,然后输出到文件夹里,例如:

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; 

问题是每次我 运行 代码时,输​​出都会更新。例如,name 变量设置为 "Tom",那么 tab1 将变为“汤姆和 2,table1 也是如此。我只是无法将新的附加到旧的那些。我应该如何修改我的代码才能做到这一点?

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

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

如果您希望 CSV 文件有一个 header 行,您可以在第一次使用 PROC EXPORT 或自己编写 header。

 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;