使用SAS数据步骤导出文件时缺少列名

时间:2016-08-02 17:32:11

标签: csv sas

我有一个大型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文件?任何帮助表示赞赏!

2 个答案:

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