我有一个大型SAS数据集Gradle coordinate format
,其中包含从各个国家/地区收集的数据。此数据集有一列" country"其中列出了发起观察的国家。我想在raw_data
中为每个国家/地区导出单独的.csv文件。我使用以下数据步骤来生成输出:
raw_data
但是,生成的.csv文件不再具有data _null_;
set raw_data;
length fv $ 200;
fv = "/directory/" || strip(put(country,$32.)) || ".csv";
file write filevar=fv dsd dlm=',';
put (_all_) (:);
run;
的列名。我的数据集中有超过一百列,因此列出所有列名称是禁止的。任何人都可以提供一些指导我如何修改上面的代码,以便将列名附加到正在导出的.csv文件?任何帮助表示赞赏!
答案 0 :(得分:1)
您可以创建一个包含变量名称的宏变量,并将它们放到CSV文件中。
proc sql noprint;
select name into :var_list separated by ", "
from sashelp.vcolumn
where libname="WORK" and memname='RAW_DATA'
order by varnum;
quit;
data _null_;
set raw_data;
length fv $ 200;
by country;
fv = "/directory/" || strip(put(country,$32.)) || ".csv";
if first.country then do;
put "&var_list";
end;
file write filevar=fv dsd dlm=',';
put (_all_) (:);
run;
答案 1 :(得分:1)
考虑这个与您的程序非常相似的数据步骤。它使用VNEXT查询PDV并将变量名称写为每个文件的第一条记录。
proc sort data=sashelp.class out=class;
by age;
run;
data _null_;
set class;
by age;
filevar=catx('\','C:\Users\name\Documents',catx('.',age,'csv'));
file dummy filevar=filevar ls=256 dsd;
if first.age then link names;
put (_all_)(:);
return;
names:
length _name_ $32;
call missing(_name_);
do while(1);
call vnext(_name_);
if _name_ eq: 'FIRST.' then leave;
put _name_ @;
end;
put;
run;