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

如何将新记录附加到SAS中现有的CSV文件中,sas,proc-sql,Sas,Proc Sql,当我第一次运行代码时,我将输出一个新的数据集,其中文件夹中有一行。然后我为变量使用新值并再次运行它,我的意图是将新记录作为第一次创建的数据集中的第二行追加 假设我有一个名为name的变量,用于多次更改其值,我还有一个名为tab1的表,用于在name每次有新值时存储新值。例如:在代码中: PROC SQL; Create table tab1 AS select a.name, a. id from tab2 a ; quit; 第一次,如果name变量为“Mark”,则tab1存储值Mark和

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

假设我有一个名为
name
的变量,用于多次更改其值,我还有一个名为
tab1
的表,用于在
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;
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; 
然后我阅读这个table1.csv,然后再次使用它来联合tab1以获得一个新表
tab3
,然后将其输出到文件夹中,例如:

PROC EXPORT data = tab1
outfile = "&somepath\table1.csv"
replace;
run;
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,表1也是。我就是不能把新的附加到旧的上。我应该如何修改代码才能做到这一点?

您不需要使用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;       

您似乎正在创建文本文件而不是数据集。这有什么原因吗?您的目标是将记录附加到现有的CSV文件吗?@Parfait,我知道逻辑相当混乱,例如:
name
=“Mark”,然后
tab1
=Mark和1;表1.csv=标记和1<代码>表3=标记和1,标记和1;更新的table1.csv=标记和1,标记和1;当您使用新的
名称运行代码时,我们将得到
表1
=Tom和2;表1.csv=Tom和2<代码>表3
=汤姆和2,汤姆和2;更新的table1.csv=Tom和2,Tom和2;我想要的输出是更新的table1.csv=Mark和1,Tom和2。希望它能成功sense@Tom是的,这就是我打算做的。很抱歉弄糊涂了。非常感谢你的建议。这真的救了我一天:)